マクロ定義はメタプログラミング?

id:yagiey:20100128:1264631316で定義したマクロfooはhogeが束縛されているかどうかは気にしない。
展開された結果の式が、評価できる式なら構わないんだな。


マクロ展開を計算と捉えれば、マクロの定義はメタプログラミング考えられる。しかもホスト言語とドメイン言語が一致している。C++におけるテンプレートメタプログラミングと同じ図式だ。
ただ、コンパイル時にできる「計算」はちょっと違うような気がする。

Schemeの場合
式の変換、つまり構文木の組み替え
C++の場合
型に関する計算、定数による簡単な計算


処理系の実装者のみならず、処理系の利用者(プログラマ)までもが構文木を触れるという点で、Scheme(というかLISP一般)は他の言語よりも強力だとか言われるんだろうなー。
それがどういう局面で便利なのかは、まだ理解できてないけど。


マクロはコンパイル時に展開されるらしい。Schemeにおけるコンパイル時って何だろう?
Gaucheはいったん中間言語コンパイルしてから実行するらしいけど、そのことなのかな?
でも、中間言語Schemeの仕様じゃないよな。一方でマクロはScheme一般の話しだよなぁ。