next up previous
Next: 9.2 スペシャルフォームの実行 Up: 9 Continuation操作機構をもつSchemeインタプリタ Previous: 9 Continuation操作機構をもつSchemeインタプリタ

9.1 インタプリタのトップレベル

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日