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 に答える