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