Next: 3.3 マクロの定義
Up: 3 マクロ機能の追加
Previous: 3.1 マクロを取り扱うインタプリタの構造
マクロ定義から展開を行なう部分は,マクロの定義を一度評価すれば結果が現
れるというものですから,マクロ定義自体はクロージャで表すことになります.
マクロ展開は,そのクロージャをとりだして引数をそのクロージャにapply
するだけの手続きになります.
(defun scheme-macro-expand (x)
(if
(and (listp x) (scheme-macro (car x)))
(scheme-macro-expand
(apply (scheme-macro (car x)) (cdr x)))
x))
ここでの定義は,applyにより一度展開したものをさらにscheme-macro-expand
しています.つまり,xで与えられるフォームがマクロフォームでなくなるま
で展開を続けます.こうすることで,interpまでもどらずにマクロ展開がなさ
れつづけるため効率が良くなります.
generated through LaTeX2HTML. M.Inaba 平成18年5月6日