For Gauche 0.9.10


Next: , Previous: , Up: マクロ   [Contents][Index]

5.4 ハイブリッドマクロ

ハイブリッドマクロは、マクロと手続きを合わせたものです。 ハイブリッドマクロに束縛されているシンボルがフォームの最初のポジションにある場合、 それはマクロのように振る舞い、マクロ展開器によって展開されます。 シンボルがその他の場所に現れた場合は、実行時に手続きへと評価されます。

これは、いわゆる「コンパイラマクロ」を実現するのに使えます。つまり、 コンパイル時に引数を調べ好きなようにフォームを変換できます。 それ以外の場合は普通の手続きへの束縛のように振る舞うので、 例えばmapの引数として渡すことができます。

Macro: define-hybrid-syntax variable expr transformer-spec

variableを通常のScheme値とマクロの両方に束縛します。 コンパイル時にtransformer-specが評価されます。それはコンパイル時環境において マクロを返さなければなりません。そして、マクロ展開用にvariableに束縛されます。 一方exprは実行時に評価され、実行時の値としてvariableに束縛されます。

マクロ展開器は、入力フォームに展開の必要がなければそれをそのまま (入力フォームとeq?になるオブジェクトとして)返すことができます。 その場合、Gaucheはフォームを単なる手続き呼び出しとしてコンパイルし、 exprの実行時の値が呼び出されます。


Next: , Previous: , Up: マクロ   [Contents][Index]