什么是| 5E | 在Common Lisp中意味着什么?

jeo*_*eon 5 lisp message common-lisp

我在Common Lisp中收到以下错误消息.

什么是|| 在CL?

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

Rai*_*wig 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>
Run Code Online (Sandbox Code Playgroud)

另请注意,Common Lisp默认使用大写符号.读取的符号将为大写.因此,符号foo被读取,然后具有符号名称"FOO".要表示带小写或大小写混合字母的符号,可以使用| foo |.如果你用(intern"foo")之类的东西创建一个小写符号,那么它也将被打印为| foo |.如果你用类似(实习"FOO")之类的东西创建一个名为符号的uppcase,那么它将被打印为foo.这就是5e打印为| 5E |的原因 用大写字母E.

如果您有符号,则可以使用SYMBOL-NAME函数将其名称作为字符串.

您可以使用函数PARSE-INTEGER从字符串中读取整数.它有一个关键字参数:RADIX,您可以在其中提供读数的基数.

CL-USER > (parse-integer (symbol-name '5e) :radix 16)
94
Run Code Online (Sandbox Code Playgroud)

否则使用#x5e等十六进制数字或更改读取基数.

Frank Shearar指出Common Lisp HyperSpec中的文档:2.3.4符号作为标记.


Gab*_*abe 5

它使用这些字符作为引号.它试图将其解释5e为变量的名称.我的猜测是你真的希望它把它解释为十六进制数,所以应该是#x5e.