## LISP のマクロについて LISP について調べると「LISP のマクロは強力」とか「マクロこそが LISP 最大の特徴」とかいう記事に当たる。 正直、今まではマクロが何故そんなに素晴らしいのか分からなかった。 てっきり、関数と同じように実行時に呼び出されるプロシージャの一種だと思っていた。 最近、マクロは **コンパイル時に呼び出し元で展開される** と知った。
目から鱗だった。 ああ、なるほど、これは一種のプリ・プロセッサであり、 **コンパイラに対する指示書** なんだな、と。
ソース・プログラムから抽象構文木を生成する時に、指示を出して抽象構文木を組み替えるための機能。 抽象構文木を生成する過程で展開されたマクロは、構文木の枝として呼び出し元の位置に『接ぎ木』され、静的に固定される。
この処理は、機械語なりバイト・コードへのコンパイル前に行われる。
実行時に動的に呼び出し・展開される訳ではない、と。 一種の置換処理という事か。
C言語のプリ・プロセッサのようにソース・プログラム対して置換を行うのではなく、抽象構文木に対して置換を行うのだ。 なるほど、確かに使いようによっては強力そうだ。 ___Aobadai Akira___ date: 2022-5-1 time: 11:29 cateogry: コンピュータ プログラム