【问题标题】:Symbols generated by gensymgensym 生成的符号
【发布时间】:2015-03-27 09:39:00
【问题描述】:
     (let ((a 34)) (print a))
    34
    34

这是预期的

但是

    (let ((#:a 34)) (print #:a))

    The variable #:A is defined but never used. 
    compilation unit finished
    ;   Undefined variable:
    ;     #:A

但是 uninterned 符号似乎在带有 gensym 的宏中可以正常工作?

【问题讨论】:

    标签: common-lisp


    【解决方案1】:

    在宏中,您生成一个符号,并通过评估您所做的绑定来使用相同的符号。这将与以下内容相同:

    (let ((sym '#:a))
      (eq sym sym))    ; ==> T
    

    您在示例中做了一些不同的事情:

    (eq '#:a '#:a)     ; ==> NIL
    

    在第一个中,您有一个非驻留符号,但由于使用了相同的值,因此每次使用的都是相同的,在第二个中(在您的代码中),您有几个看起来相似的非驻留符号,但实际上是不同的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-24
      • 2021-11-20
      • 2014-11-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多