2012-10-17 63 views
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))

這不是我想要的。

有沒有人有任何想法?

回答

2

'whatever(quote whatever)的簡寫。如果你有一個像A,B,C,d等符號列表,並且要包含結構(bar (quote a) (quote b) (quote c) ...)列表,你可以做這樣的事情:

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

它的工作。非常感謝你。 –

相關問題