Что значит | 5E |значит в Common Lisp? - PullRequest
5 голосов
/ 01 июля 2010

Я получил следующее сообщение об ошибке в Common Lisp.

Что означает ||значит в CL?

CL-USER> (write-to-string 5e)
The variable |5E| is unbound.
   [Condition of type UNBOUND-VARIABLE]

Ответы [ 2 ]

10 голосов
/ 01 июля 2010

| 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 Символы в качестве токенов .

5 голосов
/ 01 июля 2010

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

...