Я получил следующее сообщение об ошибке в языке Common LISP.
Что делает ||, означают в CL?
CL-USER> (write-to-string 5e)
The variable |5E| is unbound.
[Condition of type UNBOUND-VARIABLE]
| 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 Символы как токены .
Он использует эти символы как кавычки. Он пытается интерпретировать 5e
как имя переменной. Я предполагаю, что вы действительно хотите, чтобы он интерпретировал его как шестнадцатеричное число, поэтому, вероятно, это должно быть # x5e
.