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))
渡せばいいと思った俺は何か勘違いしてるのかなぁ