(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までもどらずにマクロ展開がなさ れつづけるため効率が良くなります.