gensym生成的符号

时间:2015-03-27 09:39:01

标签: common-lisp

     (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的宏中工作正常吗?

1 个答案:

答案 0 :(得分:0)

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

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

您在示例中执行了不同的操作:

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

在第一个中你有一个未加工的符号,但每次使用相同的值时使用相同的符号,在第二个(和你的代码中)你有几个相似的看起来不同的符号实际上是不同的。