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)))
。。。と思ったけど、やっていることは変わらないっぽい。
問題はとりあえずできたけど、まだまだヨチヨチ歩き感がある感じ。
何はともあれ、第一章終了~。ぱちぱちぱちぱち。