在Common Lisp中,|5E|是什么意思?

5

我在Common Lisp中遇到了以下错误信息。

在CL中,||代表什么意思?

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

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|的形式打印出来。如果您使用类似于(intern“FOO”)的方法创建一个大写命名的符号,则它将以foo的形式打印出来。这就是为什么5e打印为具有大写E的|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
CLHS第2.3.4节描述了符号的语法。 - Frank Shearar
感谢您详细的回复。 - john

5

它将那些字符用作引号。它试图将5e解释为变量的名称。我的猜测是您真正希望将其解释为十六进制数,因此应该使用#x5e


我真的想把5e解释为#x5e。 - john

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接