Что делает |5E |, означают в языке Common LISP?

Я получил следующее сообщение об ошибке в языке Common LISP.

Что делает ||, означают в CL?

CL-USER> (write-to-string 5e)
The variable |5E| is unbound.
   [Condition of type UNBOUND-VARIABLE]
5
задан Svante 1 July 2010 в 08:09
поделиться

2 ответа

| foo | это просто печатное представление символов. По умолчанию 5e не читается как число, поэтому это символ, и его можно напечатать как | 5E |. Можно также использовать его, чтобы иметь в символах всевозможные символы, включая пробелы. | это же символ, не так ли? - это!

CL-USER > (describe '|this is a symbol, isn't it?|)

|this is a symbol, isn't it?| is a SYMBOL
NAME          "this is a symbol, isn't it?"
VALUE         #<unbound value>
FUNCTION      #<unbound function>
PLIST         NIL
PACKAGE       #<The COMMON-LISP-USER package, 798/1024 internal, 0/4 external>

Обратите внимание, что Common Lisp по умолчанию использует символы верхнего регистра. Прочитанные символы будут в верхнем регистре. Таким образом, считывается символ foo, а затем ему присваивается имя символа "FOO". Для обозначения символа строчными или смешанными буквами можно использовать | foo |. Если вы создадите символ в нижнем регистре с чем-то вроде (intern "foo"), он также будет напечатан как | foo |. Если вы создаете именованный символ в верхнем регистре с чем-то вроде (intern "FOO"), он будет напечатан как foo. Вот почему 5e печатается как | 5E | с заглавной буквой E.

Если у вас есть символ, вы можете получить его имя в виде строки с помощью функции SYMBOL-NAME.

Вы можете прочитать целое число из строки с помощью функции PARSE-INTEGER. Он имеет параметр ключевого слова: RADIX, где вы можете указать систему счисления для чтения.

CL-USER > (parse-integer (symbol-name '5e) :radix 16)
94

В противном случае используйте шестнадцатеричные числа, например # x5e, или измените базу чтения.

Фрэнк Шеарар указывает на документацию в Common Lisp HyperSpec: 2.3.4 Символы как токены .

10
ответ дан 18 December 2019 в 11:52
поделиться

Он использует эти символы как кавычки. Он пытается интерпретировать 5e как имя переменной. Я предполагаю, что вы действительно хотите, чтобы он интерпретировал его как шестнадцатеричное число, поэтому, вероятно, это должно быть # x5e .

5
ответ дан 18 December 2019 в 11:52
поделиться