(defmacro when (condition &rest body) (list 'if condition (cons 'progn body)))このように,マクロ定義の引数には, 関数定義のように,&rest, &optional, &keyパラメータも使うこ とができます. macro定義されているかどうかを調べる関数として, macro-functionという関 数があります. さらに,defmacro式の引数には,マクロ・フォームの分解のパターンを書くこ とができるようになっています.例えば,when式では, (when 条件 . 本体) というパターンになるので,whenより後ろをdefmacroの引数パターンとして 書けるようになっています. つまり,
(defmacro when (condition . body) (list 'if condition (cons 'progn body)))と書くことができます.