8

でxs`、マクロ:独自の定義は以下のように、我々はマクロwith-gensymsを定義します。(XSを休ま&) `の違い`と `実践Common Lispの<a href="http://www.gigamonkeys.com/book/macros-defining-your-own.html" rel="nofollow noreferrer">Chapter 8</a>でのdefmacro仮引数リスト

(defmacro with-gensyms ((&rest names) &body body) 
    `(let ,(loop for n in names collect `(,n (gensym))) 
    ,@body)) 

は何ですか(&rest names)の目的ですか?ちょうどnamesと置き換えると、その効果は同じように見えます。どちらの場合も、 "gensym-ed"となるシンボルのリストを渡します。

答えて

9

違い:

(&rest names)試合のみのリスト。 DEFMACRO WITH-GENSYMSに引数を解析中

エラー:

偽のサブリストAを満たすためにSB-KERNEL::DEFMACRO-BOGUS-SUBLIST-ERRORに呼び出さ

デバッガ:誰かが何か他のものとのマクロを使用している場合は、エラーがマクロエクスパンダから来ていますラムダリスト(&REST NAMES)

namesと一致します。 TYPE-ERRORに呼び出さ

デバッガ:誰かがいないリストでマクロを使用している場合は、エラーがリストを必要とLOOPマクロから来る値AがタイプLISTのではありません。

これにより、以前のエラーが改善されました。

+0

したがって、 'args'がリストであると予想されるときは'((&rest args)) 'を使うのは慣用です。 –

+0

@TianxiangXiong:より具体的な構成を使用したくないですか? –

+0

はい、そうです。 –

関連する問題

 関連する問題