0

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

这不是我想要的。

有人有什么主意吗?

4

1 回答 1

2

'whatever是 的简写(quote whatever)。如果您有一个符号列表,如 A、B、C、D 等,并且您想要一个包含结构的列表(bar (quote a) (quote b) (quote c) ...),您可以执行以下操作:

`(bar ,@(mapcar (lambda (symbol) (list 'quote symbol)) symbols))
于 2012-10-17T12:50:44.437 回答