SICP 第一章も最後の問題。サクサクいきます。
問題解答
問1.46
(define (iterative-improbe iterator checker)
(lambda(x) (let ((next (iterator x)))
(if (checker x next)
next
((iterative-improbe iterator checker) next)))))
(define tolerance 0.00001)
(define (fixed-point f)
(define (close-enough? v1 v2)
(< (abs (- v1 v2)) tolerance))
((iterative-improbe f close-enough?) 1.0))
(fixed-point cos)
(define (average v1 v2)
(/ (+ v1 v2) 2))
(define (average-damp f)
(lambda (x) (average x (f x))))
(define (sqrt x)
(fixed-point (average-damp (lambda (y) (/ x y)))))
(sqrt 2)
とりあえずできたけど、三角い感じがする。答えあわせをすると随分スッキリ書かれている。
(define (iterative-improve test improve)
(lambda (g)
(define (iter g)
(if (test g) g
(iter (improve g))))
(iter g)))
。。。と思ったけど、やっていることは変わらないっぽい。
問題はとりあえずできたけど、まだまだヨチヨチ歩き感がある感じ。
何はともあれ、第一章終了~。ぱちぱちぱちぱち。