Next: Backquote, Previous: Compiling Macros, Up: Macros
Lispのマクロは、そのcarがmacro
であるリストです。
そのcdrは関数であるべきです。
マクロの展開は、マクロ呼び出しの未評価の引数式に
(apply
で)関数を適用して動作します。
無名関数のように無名Lispマクロを使うことも可能ですが、
けっしてしないでしょう。
mapcar
のようなファンクショナルに無名マクロを渡す意味がないからです。
実用上は、すべてのLispマクロには名前があり、
普通、スペシャルフォームdefmacro
で定義します。
defmacro
は、シンボルnameをつぎのようなマクロとして定義する。(macro lambda argument-list . body-forms)(このリストのcdrは関数、つまり、ラムダ式であることに注意。) このマクロオブジェクトは、nameの関数セルに格納される。 フォーム
defmacro
を評価した結果、返される値はnameであるが、 通常この値は無視する。argument-listの形式と意味は、関数のそれと同じであり、 キーワード
&rest
や&optional
を使ってもよい (see Argument List)。 マクロにも説明文字列を指定できるが、 マクロを対話的に呼び出すことはできないので、interactive
宣言は無視する。