2010-07-01 5 views

ответ

10

| 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 |. Если вы создадите вербальный символ с чем-то вроде (стажер «FOO»), он будет напечатан как foo. Вот почему 5е печатает как | 5E | с верхним регистром.

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

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

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

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

Frank Shearar указывает документацию в Common Lisp HyperSpec: 2.3.4 Symbols as Tokens.

+1

В разделе 2.3.4 CLHS описывается синтаксис символа. –

+0

Благодарим вас за подробный ответ. – jeon

5

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

+0

Я действительно хочу интерпретировать от 5e до # x5e. – jeon

+0

Правильный ответ. –

+0

Почему downvote? – Gabe