SICPの問題を解こう21
問題 1.43
fをn回作用させる手続きを書く問題
(define (repeated f count) (if (= count 1) (lambda (x) (f x)) (lambda (x) (f ((repeated f (- count 1)) x))))) (define (square x) (* x x)) (print ((repeated square 2) 5)) (print ((repeated square 3) 5))
lambdaの使い方にまだ全然慣れない。。
「Hint: You may find it convenient to use `compose'」compose使えば良かったのか
問題 1.44
smooth手続きを定義してそれをn回行う問題。
(define (repeated f count) (if (= count 1) (lambda (x) (f x)) (lambda (x) (f ((repeated f (- count 1)) x))))) (define (smooth f) (define dx 0.0001) (lambda (x) (/ (+ (f (- x dx)) (f x) (f (+ x dx))) 3))) (define (n-smooth f count) ((repeated smooth count) f)) (define (square x) (* x x)) (print ((n-smooth square 10) 2.0))
最初 (define (n-smooth f count) (repeated (smooth f) count))ってやっててsmoothed-fがcount回行われてが計算されてた。