next up previous
Next: 3.3 マクロの定義 Up: 3 マクロ機能の追加 Previous: 3.1 マクロを取り扱うインタプリタの構造

3.2 マクロの展開

マクロ定義から展開を行なう部分は,マクロの定義を一度評価すれば結果が現 れるというものですから,マクロ定義自体はクロージャで表すことになります. マクロ展開は,そのクロージャをとりだして引数をそのクロージャに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日