SICP問題1.44
平滑化関数
(define (smooth f) (let ((dx 0.00001)) (lambda (x) (/ (+ (f (- x dx)) (f x) (f (+ x dx))) 3))))
n重平滑化関数
(define (n-fold-smooth f n) (repeated (smooth f) n))
smooth は良いけど、n重平滑化関数は明らかに違う。
ということで、ちゃんと考える。
repeated の定義は以下のとおり。
(define (repeated f n) (define (iter g m) (if (> m 1) (iter (compose f g) (- m 1)) g)) (iter f n))
smooth したいのは smooth で取得した結果じゃないので、こういう感じになる。
(define (n-fold-smooth f n) ((repeated smooth n) f))