sicpマラソン5日目
環境が復帰したので再開。
[メモ]
[演習問題]
1.20
(define % remainder) (define (gcd a b) (if (= b 0) a (gcd b (% a b))))
正規順序で評価
(gcd 206 40) ==> (if (= 40 0) ;; if節 (= 40 0)==>#f を評価 206 (gcd 40 (% 206 40))) ==> (gcd 40 (% 206 40)) ==> (if (= (% 206 40) 0) ;; if節 (= (% 206 40) 0)==>#fを評価、%の評価:+1回 40 (gcd (% 206 40) (% 40 (%206 40)))) ==> (gcd (% 206 40) (% 40 (% 206 40))) ==> (if (= (% 40 (% 206 40)) 0) ;; if節 %の評価:+2回 (% 206 40) (gcd (% 40 (% 206 40)) (% (% 206 40) (% 40 (% 206 40)))))) ==> (gcd (% 40 (% 206 40)) (% (% 206 40) (% 40 (% 206 40))))) ==> (if (= (% (% 206 40) (% 40 (% 206 40))) 0) ;; if節 %の評価:+4回 (% 40 (% 206 40)) (gcd (% (% 206 40) (% 40 (% 206 40))) (% (% 40 (% 206 40)) (% (% 206 40) (% 40 (% 206 40)))))) ==> (gcd (% (% 206 40) (% 40 (% 206 40))) (% (% 40 (% 206 40)) (% (% 206 40) (% 40 (% 206 40))))) ==> (if (= (% (% 40 (% 206 40)) (% (% 206 40) (% 40 (% 206 40)))) 0) ;; if節 %の評価:+7回 (% (% 206 40) (% 40 (% 206 40))) (gcd (% (% 40 (% 206 40)) (% (% 206 40) (% 40 (% 206 40)))) (% (% (% 206 40) (% 40 (% 206 40))) (% (% 40 (% 206 40)) (% (% 206 40) (% 40 (% 206 40))))))) ==> (% (% 206 40) (% 40 (% 206 40))) ;; %の評価:+4回 ==> 2 ;; %の評価:合計18回
作用的順序で評価
(gcd 206 40) ==> (if (= 40 0) 206 (gcd 40 (% 206 40))) ==> (gcd 40 (% 206 40)) ;; %の評価:+1回 ==> (gcd 40 6) ==> (if (= 6 0) 40 (gcd 6 (% 40 6))) ==> (gcd 6 (% 40 6)) ;; %の評価:+1回 ==> (gcd 6 4) ==> (if (= 4 0) 6 (gcd 4 (% 6 4))) ==> (gcd 4 (% 6 4)) ;; %の評価:+1回 ==> (gcd 4 2) ==> (if (= 2 0) 4 (gcd 2 (% 4 2))) ==> (gcd 2 (% 4 2)) ;; %の評価:+1回 ==> (gcd 2 0) ==> (if (= 0 0) 2 (gcd 2 (% 2 0))) ==> 2 ;; %の評価:合計4回