exercise 4.25~26

はいはい気付いたらリトバスしてましたよ、っと。

とは言えそろそろ一区切りついた感じなので、今度こそSICP再開。

exercise 4.25

applicative-order
-> 無限ループ。unlessの条件判定と一緒に(* n (factorial (- n 1)))も計
算しちゃうので、 とまらずに factorial の引数をどんどん小くして計算し
ていっちゃう。

normal-order
-> うまくいく。

exercise 4.26

derived expressionにするにはifつかえばいいでしょう。
実際にやってみると↓

(define (unless? exp) (tagged-list? exp 'unless))
(define (unless->if exp)
  (make-if (cadr exp) (cadddr exp) (caddr exp)))

;;あとは以下をevalに追加
;;((unless? exp) (eval-if (unless->if exp) env))

関数にしておいた時の利点は良い例が思いつかん・・・
ちょっと汚いけど
(lambda (pred usual exp) (if pred exp usual))
渡せばいいと思った俺は何か勘違いしてるのかなぁ