【问题标题】:What does |5E| mean in Common Lisp?|5E| 是什么在 Common Lisp 中是什么意思?
【发布时间】:2010-07-01 04:27:59
【问题描述】:

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

什么是||在 CL 中是什么意思?

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

【问题讨论】:

    标签: lisp common-lisp message


    【解决方案1】:

    |富|只是符号的印刷表示。 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 打印为 |5E| 的原因。带有大写的 E。

    如果你有一个符号,你可以用函数 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

    【讨论】:

    • CLHS 2.3.4 节描述了符号的语法。
    • 感谢您的精心回复。
    【解决方案2】:

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

    【讨论】:

    • 我好想从5e翻译成#x5e。
    猜你喜欢
    • 2011-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-03
    • 2017-06-11
    • 2018-03-05
    • 2023-03-27
    • 2018-07-04
    相关资源
    最近更新 更多