Next: , Previous: Macros, Up: Macros


12.1 マクロの簡単な例

C言語の演算子++のように、 変数の値を増加させるLispの構文を定義したいとしましょう。 (inc x)のように書いて、 (setq x (1+ x))のような効果を得たいのです。 これを行うマクロ定義はつぎのようになります。

     (defmacro inc (var)
        (list 'setq var (list '1+ var)))

これを(inc x)のように呼び出すと、 引数varはシンボルxになります。 関数のようにxではありません。 マクロの本体では、これを使って展開形(setq x (1+ x))を構築します。 マクロ定義がこの展開形を返すと、 Lispはそれを評価することに進み、xを増やします。