SICP 読み (284) 5.4 積極制御評価器
問題 5.24 にダウト発見。帰りしなのバスの中でテキストを読んでいた所、
ループを構成し、ev-sequence を使い、その節の行動を評価しなければならない
という記述を発見。よく考えたら cond のソレは命令のリストになってるんだ、という事に今更気がつく。ってか問題の文章きちんと読めよ、と。
以下が修正分です。手が入っているのは ev-cond-consequent のみ。
ev-cond (assign exp (op cond-clauses) (reg exp)) ev-cond-loop (test (op null?) (reg exp)) (branch (label ev-cond-false)) (assign unev (op cdr) (reg exp)) (assign exp (op car) (reg exp)) (test (op cond-else-clause?) (reg exp)) (branch (label ev-cond-consequent)) (save exp) (save unev) (save continue) (assign continue (label ev-cond-decide)) (assign exp (op cond-predicate) (reg exp)) (goto (eval-dispatch)) ev-cond-decide (restore continue) (restore unev) (restore exp) (test (op true?) (reg val)) (branch (label ev-cond-consequent)) (assign exp (reg unev)) (goto (label ev-cond-loop)) ev-cond-consequent (save continue) (assign exp (op cond-actions) (reg exp)) (goto (label ev-sequence)) ev-cond-false (assign val (const false)) (goto (reg continue))
continue の状態がどうなってるか、とか ev-sequence に行ってらっしゃい、な部分に若干の微妙さを感じとりますが、このまま動作確認してしまえ。
とは言え、今から評価器の動作環境の検討だったりするんですが。