2016/02/04
SICP 問題 5.32
a: 演算子が記号である場合の組み合わせの式を別のクラスと認識し,そういう式を最適化する.
operatorがvariableであればenvをsaveしない.
ev-application
(save continue)
(assign unev (op operands) (reg exp))
(assign exp (op operator) (reg exp))
(test (op variable?) (reg exp))
(branch (label ev-appl-symbol-operator))
(save env)
(save unev)
(assign continue (label ev-appl-did-operator))
(goto (label eval-dispatch))
ev-appl-symbol-operator
(assign continue (label ev-appl-did-symbol-operator))
(goto (label eval-dispatch))
ev-appl-did-symbol-operator
(assign argl (op empty-arglist))
(assign proc (reg val))
(test (op no-operands?) (reg unev))
(branch (label apply-dispatch))
(save proc)
(goto (label ev-appl-operand-loop))
b: 評価器にこのような翻訳系の最適化のすべてを組み込むことができ,翻訳系の利点をすべて除けるという考えについて
逐次評価するインタプリタではどうしても翻訳系ほどの最適化は出来ない.