(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的宏中工作正常吗?
答案 0 :(得分:0)
在宏中,您生成一个符号,并通过评估您所做的绑定来使用相同的符号。它将与:
相同(let ((sym '#:a))
(eq sym sym)) ; ==> T
您在示例中执行了不同的操作:
(eq '#:a '#:a) ; ==> NIL
在第一个中你有一个未加工的符号,但每次使用相同的值时使用相同的符号,在第二个(和你的代码中)你有几个相似的看起来不同的符号实际上是不同的。