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))