14.1 単純なマクロの例

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))になります。マクロが一度この展開形をリターンするとLispはそれを評価するので、xがインクリメントされます。

Function: macrop object

この述語はその引数がマクロかどうかテストして、もしマクロならt、それ以外はnilをリターンする。

This page has generated for branch:work/emacs-30_8ac894e2246f25d2a2a97d866b10e6e0b0fede5a, commit:b7b3c5b81a7a4eec61faa3ed3d7c731d52d3987b to check Japanese translation.