Я только что читал о макросе для считывания толстой кишки с акцентом на знаке, и мне показалось, что он имеет очень похожий эффект на gensym
Двоеточие с острым знаком: «вводит неискаженный символ».
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>
Сладкий, поэтому его можно использовать в качестве генсима.
На мой взгляд, это выглядит чище, чем gensym, с явно идентичным результатом. Я уверен, что упускаю важную деталь, поэтому мой вопрос: что это?