我想将(foo a b c d e ...)
扩展为===> (bar 'a 'b 'c 'd 'e ...)
到目前为止,我只得到了这个解决方案:
(defmacro foo (a1 &rest a2)
`(bar ',a1 '(,@a2)))
但结果是:
(foo a b c d)
===> (bar 'a '(b c d))
这不是我想要的。
有没有人有任何想法?
答案 0 :(得分:2)
'whatever
是(quote whatever)
的简写。如果你有一个符号列表,如A,B,C,D等,并且你想要一个包含结构(bar (quote a) (quote b) (quote c) ...)
的列表,你可以这样做:
`(bar ,@(mapcar (lambda (symbol) (list 'quote symbol)) symbols))