Next: , Up: Macros   [Contents][Index]


13.1 A Simple Example of a Macro

Cの++演算子のように、変数の値をインクリメントするためのLisp構造を定義したいとします。(inc x)のように記述すると、(setq x (1+ x))という効果を得たいとします。以下はこれを行うマクロ定義です:

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

これを(inc x)のように呼び出すと、引数varはシンボルxになります — 関数のときのようにxではありません。このマクロのbodyはこれを展開の構築に使用して、展開形は(setq x (1+ x))になります。マクロが1度この展開形をreturnすると。Lispはそれを評価するので、xはインクリメントされます。

Function: macrop object

この術後は、その引数がマクロかどうかテストして、もしマクロならt、それ以外はnilをreturnします。