SICP 読み (282) 5.4 積極制御評価器
へろへろなんで控えのみ。ちなみに 5.24 については直前エントリの状態で別途実機確認予定ッス。
問題 5.25
む。これ、思ったより面倒だな。ええと、actual-value で取り出した手続きが primitive か compound かで引数の処理の仕方が違ってくる。てコトは最初に
ev-application (save continue) (assign unev (op operands) (reg exp)) (assign exp (op operator) (reg exp)) (assign argl (op empty-arglist)) (assign proc (op actual-value) (reg exp) (reg env)) (test (op no-operands?) (reg unev)) (branch (label apply-dispatch)) (save proc)
こうしといて、proc が primitive か compound かで unev を評価するか遅延するかを決めないと駄目なんだろうな。てーコトは、primitive な場合は既存の ev-appl-operand-loop が使えるはず。逆に compound なソレは delay なループが必要か。
compound な場合は引数は eval されないハズなので proc を push する必要ないのかなぁ。既存を生かすのであれば argl に list-of-delayed-args を蓄積すれば、で良いのでしょうか。list-of-delayed-args も評価器に手続きを盛り込むべき??
あ、ev-appl-operand-loop でも actual-value しないと駄目だな。