予習
出発準備完了なのかどうか。今日の予定になってるナニを予習。
まず、関数の不動点をナニする手続きが以下。
(define tolerance 0.00001) (define (fixed-point f first-guess) (define (close-enough? v1 v2) (< (abs (- v1 v2)) tolerance)) (define (try guess) (let ((next (f guess))) (if (close-enough? guess next) next (try next)))) (try first-guess))
これは 1.3.3 節で出てくるものです。で、average-damp という手続きが 1.3.4 で出てくる。
(define (average-damp f) (lambda (x) (average x (f x))))
ちなみに 1.3.3 の平方根の手続きな例が以下。
(define (sqrt x) (fixed-point (lambda (y) (/ x y)) 1.0))
1.3.4 で出てくるナニが以下。
(define (sqrt x) (fixed-point (average-damp (lambda (y) (/ x y))) 1.0))
これって展開すると以下だな。
(define (sqrt x) (fixed-point (lambda (x) (average x ((lambda (y) (/ x y)) x))) 1.0))
これと、1.1.7 の平方根の手続きを比べてみる。
(define (sqrt x) (sqrt-iter 1.0 x)) (define (sqrt-iter guess x) (if (good-enough? guess x) guess (ssqrt-iter (improve guess x) x))) (define (improve guess x) (average guess (/ x guess))) (define (average x y) (/ (+ x y) 2)) (define (good-enough? guess x) (< (abs (- (square guess) x)) 0.001))
同じ方法使ってますな。しかも 1.3.4 の方が定義は簡潔明瞭な事が分かります。今回は 1.41、1.42、1.43 あたりはお手伝いできそげですが、彼的には簡単なのに違いない。