Next: 9.2 スペシャルフォームの実行
Up: 9 Continuation操作機構をもつSchemeインタプリタ
Previous: 9 Continuation操作機構をもつSchemeインタプリタ
Continuation機構を持たせる場合,
インタプリタのトップレベルは,関数interpの返り値をprint
するのではなく,interpに継続としてprintを渡すという
形で実現されます.
つまり,interpの結果がinterpに渡される継続手続きの引数に
なり,その継続手続きがprintであるという形です.
そこで,scheme-interpreterは,
(defun scheme-interpreter ()
(init-scheme-interpreter)
(loop
(format t "~&==> ")
(interp (read) nil #'print))
)
という形になり,interpは,
(defun interp (x env cc)
(cond
((symbolp x) (funcall cc (get-var x env)))
((atom x) (funcall cc x))
((member (car x) '(quote begin set! if lambda))
(interp-specialform (car x) (cdr x) env cc))
((scheme-macro (car x))
(interp (scheme-macro-expand x) env cc))
(t (interp-call x env cc))))
というようにします.ここで,今まで値を返すだけであった
部分が,返す値をccに適用する形に変更されます.
generated through LaTeX2HTML. M.Inaba 平成18年5月6日