マクロ定義はメタプログラミング?
id:yagiey:20100128:1264631316で定義したマクロfooはhogeが束縛されているかどうかは気にしない。
展開された結果の式が、評価できる式なら構わないんだな。
マクロ展開を計算と捉えれば、マクロの定義はメタプログラミング考えられる。しかもホスト言語とドメイン言語が一致している。C++におけるテンプレートメタプログラミングと同じ図式だ。
ただ、コンパイル時にできる「計算」はちょっと違うような気がする。
処理系の実装者のみならず、処理系の利用者(プログラマ)までもが構文木を触れるという点で、Scheme(というかLISP一般)は他の言語よりも強力だとか言われるんだろうなー。
それがどういう局面で便利なのかは、まだ理解できてないけど。
マクロはコンパイル時に展開されるらしい。Schemeにおけるコンパイル時って何だろう?
Gaucheはいったん中間言語にコンパイルしてから実行するらしいけど、そのことなのかな?
でも、中間言語はSchemeの仕様じゃないよな。一方でマクロはScheme一般の話しだよなぁ。