| 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 |.Если вы создадите символ uppcase с именем что-то вроде (intern "FOO"), он будет напечатан как foo.Вот почему 5e печатает как | 5E |с заглавной буквы E.
Если у вас есть символ, вы можете получить его имя в виде строки с помощью функции SYMBOL-NAME.
Вы можете прочитать целое число из строки с помощью функции PARSEцелочисленный.У него есть параметр ключевого слова: RADIX, где вы можете указать основание для чтения.
CL-USER > (parse-integer (symbol-name '5e) :radix 16)
94
В противном случае используйте шестнадцатеричные числа, такие как # x5e, или измените базу чтения.
Фрэнк Шиарар указывает на документацию в Common Lisp HyperSpec: 2.3.4 Символы в качестве токенов .