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 に行ってらっしゃい、な部分に若干の微妙さを感じとりますが、このまま動作確認してしまえ。
とは言え、今から評価器の動作環境の検討だったりするんですが。