Chat (Lingr.com)
Informaiton
Daily
Column
- MySQL日本語の旅(5/1)
- アクセス向上秘伝(5/9)
- 一風変ったHaskellλ門(6/13)
- SICP Answer Book (5/31) 問題3.26追加
Zope Solution
Extra
アーカイブ
OSS案内所
Site Info
関連リンク
##(link2sicp "book-Z-H-11.html#%_thm_1.20" "Exercise 1.20")
解答例
正規順序
(gcd 206 40)
--> ((lambda (a b)
(if (= b 0)
a
(gcd b (remainder a b))))
206 40)
--> (if (= 40 0)
206
(gcd 40 (remainder 206 40)))
--> (if #f
206
(gcd 40 (remainder 206 40)))
--> (gcd 40 (remainder 206 40))
--> ((lambda (a b)
(if (= b 0) a (gcd b (remainder a b))))
40
(remainder 206 40))
--> (if (= (remainder 206 40) 0) ;; ☆
40
(gcd (remainder 206 40) (remainder 40 (reaminder 206 40))))
--> (if (= 6 0)
40
(gcd (remainder 206 40)
(remainder 40 (reaminder 206 40))))
--> (if #f
40
(gcd (remainder 206 40)
(remainder 40 (reaminder 206 40))))
--> (gcd (remainder 206 40)
(remainder 40 (reaminder 206 40)))
--> ((lambda (a b)
(if (= b 0) a (gcd b (remainder a b))))
(remainder 206 40)
(remainder 40 (reaminder 206 40)))
--> (if (= (remainder 40 (reaminder 206 40)) 0) ;; ☆
(remainder 206 40)
(gcd (remainder 40 (reaminder 206 40))
(remainder (remainder 206 40)
(remainder 40 (remainder 206 40)))))
--> (if (= (remainder 40 6) 0) ;; ☆
(remainder 206 40)
(gcd (remainder 40 (reaminder 206 40))
(remainder (remainder 206 40)
(remainder 40 (remainder 206 40)))))
--> (if (= 4 0)
(remainder 206 40)
(gcd (remainder 40 (reaminder 206 40))
(remainder (remainder 206 40)
(remainder 40 (remainder 206 40)))))
--> (if #f
(remainder 206 40)
(gcd (remainder 40 (reaminder 206 40))
(remainder (remainder 206 40)
(remainder 40 (remainder 206 40)))))
--> (gcd (remainder 40 (reaminder 206 40))
(remainder (remainder 206 40)
(remainder 40 (remainder 206 40)))))
--> ((lambda (a b)
(if (= b 0) a (gcd b (remainder a b))))
(remainder 40 (reaminder 206 40))
(remainder (remainder 206 40)
(remainder 40 (remainder 206 40))))
--> (if (= (remainder (remainder 206 40) ;; ☆
(remainder 40 (remainder 206 40)))
0)
(remainder 40 (reaminder 206 40))
(gcd (remainder (remainder 206 40)
(remainder 40 (remainder 206 40)))
(remainder (remainder 40 (reaminder 206 40))
(remainder (remainder 206 40)
(remainder 40 (remainder 206 40))))))
--> (if (= (remainder 6
(remainder 40 (remainder 206 40))) ;; ☆
0)
(remainder 40 (reaminder 206 40))
(gcd (remainder (remainder 206 40)
(remainder 40 (remainder 206 40)))
(remainder (remainder 40 (reaminder 206 40))
(remainder (remainder 206 40)
(remainder 40 (remainder 206 40))))))
--> (if (= (remainder 6 (remainder 40 6)) ;; ☆
0)
(remainder 40 (reaminder 206 40))
(gcd (remainder (remainder 206 40)
(remainder 40 (remainder 206 40)))
(remainder (remainder 40 (reaminder 206 40))
(remainder (remainder 206 40)
(remainder 40 (remainder 206 40))))))
--> (if (= (remainder 6 4) ;; ☆
0)
(remainder 40 (reaminder 206 40))
(gcd (remainder (remainder 206 40)
(remainder 40 (remainder 206 40)))
(remainder (remainder 40 (reaminder 206 40))
(remainder (remainder 206 40)
(remainder 40 (remainder 206 40))))))
--> (if (= 2 0)
(remainder 40 (reaminder 206 40))
(gcd (remainder (remainder 206 40)
(remainder 40 (remainder 206 40)))
(remainder (remainder 40 (reaminder 206 40))
(remainder (remainder 206 40)
(remainder 40 (remainder 206 40))))))
--> (if #f
(remainder 40 (reaminder 206 40))
(gcd (remainder (remainder 206 40)
(remainder 40 (remainder 206 40)))
(remainder (remainder 40 (reaminder 206 40))
(remainder (remainder 206 40)
(remainder 40 (remainder 206 40))))))
--> (gcd (remainder (remainder 206 40)
(remainder 40 (remainder 206 40)))
(remainder (remainder 40 (reaminder 206 40))
(remainder (remainder 206 40)
(remainder 40 (remainder 206 40)))))
--> ((lambda (a b)
(if (= b 0) a (gcd b (remainder a b))))
(remainder (remainder 206 40)
(remainder 40 (remainder 206 40)))
(remainder (remainder 40 (reaminder 206 40))
(remainder (remainder 206 40)
(remainder 40 (remainder 206 40)))))
--> (if (= (remainder (remainder 40 (reaminder 206 40)) ;; ☆
(remainder (remainder 206 40)
(remainder 40 (remainder 206 40))))
0)
(remainder (remainder 206 40)
(remainder 40 (remainder 206 40)))
(gcd (remainder (remainder 40 (reaminder 206 40))
(remainder (remainder 206 40)
(remainder 40 (remainder 206 40))))
(remainder (remainder (remainder 206 40)
(remainder 40 (remainder 206 40)))
(remainder (remainder 40 (reaminder 206 40))
(remainder (remainder 206 40)
(remainder 40 (remainder 206 40)))))))
--> (if (= (remainder (remainder 40 6) ;; ☆
(remainder (remainder 206 40)
(remainder 40 (remainder 206 40))))
0)
(remainder (remainder 206 40)
(remainder 40 (remainder 206 40)))
(gcd (remainder (remainder 40 (reaminder 206 40))
(remainder (remainder 206 40)
(remainder 40 (remainder 206 40))))
(remainder (remainder (remainder 206 40)
(remainder 40 (remainder 206 40)))
(remainder (remainder 40 (reaminder 206 40))
(remainder (remainder 206 40)
(remainder 40 (remainder 206 40)))))))
--> (if (= (remainder 4
(remainder (remainder 206 40)
(remainder 40 (remainder 206 40)))) ;; ☆
0)
(remainder (remainder 206 40)
(remainder 40 (remainder 206 40)))
(gcd (remainder (remainder 40 (reaminder 206 40))
(remainder (remainder 206 40)
(remainder 40 (remainder 206 40))))
(remainder (remainder (remainder 206 40)
(remainder 40 (remainder 206 40)))
(remainder (remainder 40 (reaminder 206 40))
(remainder (remainder 206 40)
(remainder 40 (remainder 206 40)))))))
--> (if (= (remainder 4
(remainder (remainder 206 40) ;; ☆
(remainder 40 6)))
0)
(remainder (remainder 206 40)
(remainder 40 (remainder 206 40)))
(gcd (remainder (remainder 40 (reaminder 206 40))
(remainder (remainder 206 40)
(remainder 40 (remainder 206 40))))
(remainder (remainder (remainder 206 40)
(remainder 40 (remainder 206 40)))
(remainder (remainder 40 (reaminder 206 40))
(remainder (remainder 206 40)
(remainder 40 (remainder 206 40)))))))
--> (if (= (remainder 4
(remainder 6 (remainder 40 6))) ;; ☆
0)
(remainder (remainder 206 40)
(remainder 40 (remainder 206 40)))
(gcd (remainder (remainder 40 (reaminder 206 40))
(remainder (remainder 206 40)
(remainder 40 (remainder 206 40))))
(remainder (remainder (remainder 206 40)
(remainder 40 (remainder 206 40)))
(remainder (remainder 40 (reaminder 206 40))
(remainder (remainder 206 40)
(remainder 40 (remainder 206 40)))))))
--> (if (= (remainder 4
(remainder 6 4)) ;; ☆
0)
(remainder (remainder 206 40)
(remainder 40 (remainder 206 40)))
(gcd (remainder (remainder 40 (reaminder 206 40))
(remainder (remainder 206 40)
(remainder 40 (remainder 206 40))))
(remainder (remainder (remainder 206 40)
(remainder 40 (remainder 206 40)))
(remainder (remainder 40 (reaminder 206 40))
(remainder (remainder 206 40)
(remainder 40 (remainder 206 40)))))))
--> (if (= (remainder 4 2) 0) ;; ☆
(remainder (remainder 206 40)
(remainder 40 (remainder 206 40)))
(gcd (remainder (remainder 40 (reaminder 206 40))
(remainder (remainder 206 40)
(remainder 40 (remainder 206 40))))
(remainder (remainder (remainder 206 40)
(remainder 40 (remainder 206 40)))
(remainder (remainder 40 (reaminder 206 40))
(remainder (remainder 206 40)
(remainder 40 (remainder 206 40)))))))
--> (if (= 0 0)
(remainder (remainder 206 40)
(remainder 40 (remainder 206 40)))
(gcd (remainder (remainder 40 (reaminder 206 40))
(remainder (remainder 206 40)
(remainder 40 (remainder 206 40))))
(remainder (remainder (remainder 206 40)
(remainder 40 (remainder 206 40)))
(remainder (remainder 40 (reaminder 206 40))
(remainder (remainder 206 40)
(remainder 40 (remainder 206 40)))))))
--> (if #t
(remainder (remainder 206 40)
(remainder 40 (remainder 206 40)))
(gcd (remainder (remainder 40 (reaminder 206 40))
(remainder (remainder 206 40)
(remainder 40 (remainder 206 40))))
(remainder (remainder (remainder 206 40)
(remainder 40 (remainder 206 40)))
(remainder (remainder 40 (reaminder 206 40))
(remainder (remainder 206 40)
(remainder 40 (remainder 206 40)))))))
--> (remainder (remainder 206 40) ;; ☆
(remainder 40 (remainder 206 40)))
--> (remainder 6 (remainder 40 (remainder 206 40))) ;; ☆
--> (remainder 6 (remainder 40 6)) ;; ☆
--> (remainder 6 4) ;; ☆
--> 2
正規順序では remainder は 18 回評価される
作用的順序評価
(gcd 206 40)
--> ((lambda (a b)
(if (= b 0) a (gcd b (remainder a b))))
206
40)
--> (if (= 40 0) 206 (gcd 40 (remainder 206 40)))
--> (if #f 206 (gcd 40 (remainder 206 40)))
--> (gcd 40 (remainder 206 40)) ;; ☆
--> (gcd 40 6)
--> ((lambda (a b)
(if (= b 0) a (gcd b (remainder a b))))
40
6)
--> (if (= 6 0) 40 (gcd 6 (remainder 40 6)))
--> (if #f 40 (gcd 6 (remainder 40 6)))
--> (gcd 6 (remainder 40 6)) ;; ☆
--> (gcd 6 4)
--> ((lambda (a b)
(if (= b 0) a (gcd b (remainder a b))))
6
4)
--> (if (= 4 0) 6 (gcd 4 (remainder 6 4)))
--> (if #f 6 (gcd 4 (remainder 6 4)))
--> (gcd 4 (reaminder 6 4)) ;; ☆
--> (gcd 4 2)
--> ((lambda (a b)
(if (= b 0) a (gcd b (remainder a b))))
4
2)
--> (if (= 2 0) 4 (gcd 2 (remainder 4 2)))
--> (if #f 4 (gcd 2 (remainder 4 2)))
--> (gcd 2 (remainder 4 2)) ;; ☆
--> (gcd 2 0)
--> ((lambda (a b)
(if (= b 0) a (gcd b (remainder a b))))
2
0)
--> (if (= 0 0) 2 (gcd 0 (remainder 2 0)))
--> (if #t 2 (gcd 0 (remainder 2 0)))
--> 2
作用的順序では remainder は 4 回評価される。
コード
##(sicp-answer-code "ex-1.20.scm")