如何从列表中以逗号后引用所有项目

时间:2012-10-17 10:29:51

标签: macros common-lisp quote

我想将(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))

这不是我想要的。

有没有人有任何想法?

1 个答案:

答案 0 :(得分:2)

'whatever(quote whatever)的简写。如果你有一个符号列表,如A,B,C,D等,并且你想要一个包含结构(bar (quote a) (quote b) (quote c) ...)的列表,你可以这样做:

`(bar ,@(mapcar (lambda (symbol) (list 'quote symbol)) symbols))