{素描}{Emacs Lisp}(2)

{Emacs Lisp マクロ K#F85E/113F}

戻り値

戻り値はリストの展開形(インタプリタはマクロから戻った後これを評価する)。

関数:macroexpand(マクロの展開形を返す)

引数に関する注意

引数は評価されない特殊形式である。

マクロ中での let 使用には注意すること。マクロ外で同名の変数がある場合,マクロ中ではマクロ展開形の定義が優先する。

make-symbol を使いインターンしていないシンボルを束縛し,その変数を "," で使うことで回避する。インターンしていないので,マクロ外では参照されない。

利点と欠点

利点

関数呼び出しがなく,高速。

コンパイル時にどのコードを使うか制御でき,汎用的な処理を短かく記述しやすい。

制御構造を評価することで,無駄な処理を省きやすい。ただし,コンパイル時に決定可能な変数と,そうでない変数の区別をする必要がある。

欠点

比較的メモリ使用量,コンパイル後のコード量が増える。