Common lisp 由gensym生成的符号

Common lisp 由gensym生成的符号,common-lisp,Common Lisp,这是人们所期望的 但是 然而,在使用gensym的宏中,非预期符号似乎可以正常工作?在宏中,您生成一个符号,并通过评估所做的绑定来使用相同的符号。这与: (let ((#:a 34)) (print #:a)) The variable #:A is defined but never used. compilation unit finished ; Undefined variable: ; #:A 您在示例中做了一些不同的事情: (

这是人们所期望的

但是


然而,在使用gensym的宏中,非预期符号似乎可以正常工作?

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

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

    The variable #:A is defined but never used. 
    compilation unit finished
    ;   Undefined variable:
    ;     #:A
您在示例中做了一些不同的事情:

(let ((sym '#:a))
  (eq sym sym))    ; ==> T
在第一种情况下,您有一个不感兴趣的符号,但由于使用了相同的值,因此每次使用的符号都是相同的;在第二种情况下,以及在代码中,您有几个看起来类似的不感兴趣的符号,实际上是不同的

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