我刚刚阅读了Sharpsign冒号阅读器宏,听起来它与gensym的效果非常相似
Sharpsign 冒号:“引入了一个不受约束的符号”
Gensym:“创建并返回一个新鲜的、无拘无束的符号”
所以一个简单的测试
CL-USER> #:dave
; Evaluation aborted on #<UNBOUND-VARIABLE DAVE {1002FF77D3}>.
CL-USER> (defparameter #:dave 1)
#:DAVE
CL-USER> #:dave
; Evaluation aborted on #<UNBOUND-VARIABLE DAVE {100324B493}>.
很酷,所以它应该失败。
现在进行宏观测试
(defmacro test (x)
(let ((blah '#:jim))
`(let ((,blah ,x))
(print ,blah))))
CL-USER> (test 10)
10
10
CL-USER>
Sweet 所以它可以像 gensym 一样使用。
对我来说,这看起来比 gensym 更干净,结果明显相同。我确定我错过了一个重要的细节,所以我的问题是,它是什么?