気持ち悪い
SICP の以下のコード。最初が末尾再帰最適化なソレ。
ev-sequence (assign exp (op first-exp) (reg unev)) (test (op last-exp?) (reg unev)) (branch (label ev-sequence-last-exp)) (save unev) (save env) (assign continue (label ev-sequence-continue)) (goto (label eval-dispatch)) ev-sequence-continue (restore env) (restore unev) (assign unev (op rest-exps) (reg unev)) (goto (label ev-sequence)) ev-sequence-last-exp (restore continue) (goto (label eval-dispatch))
で、以下がそうでないもの、との事。
ev-sequence (test (op no-more-exps?) (reg unev)) (branch (label ev-sequence-end)) (assign exp (op first-exp) (reg unev)) (save unev) (save env) (assign continue (label ev-sequence-continue)) (goto (label eval-dispatch)) ev-sequence-continue (restore env) (restore unev) (assign unev (op rest-exps) (reg unev)) (goto (label ev-sequence)) ev-sequence-end (restore continue) (goto (reg continue))
なんとなくイメージできてるんだけど明確でない分気持ち悪いと言いますか。で、それ以上に気持ち悪いのが集中して手続きを見れない現状だったりします。(何
って良く考えたら上記の手続き一発だけ見ても駄目なんじゃん。このあたりまでイメージできてるんだったら、さくっと環境作って練習問題ヤッツケた方が深く理解できそげな気がしてきました。