SICP読書録その5
ex1.15
(define (cube x) (* x x x)) (define (p x) (- (* 3 x) (* 4 (cube x)))) (define (sine angle) (if (not (> (abs angle) 0.1)) angle (p (sine (/ angle 3.0)))))
正直、へーっと思わされた。よく考えたら(よく考えなくても)この通りなんだけど不思議な感じ。
別にこの「へー」にschemeは関係ないけどね。
(sine 12.15)あたりなら5回でいける。
普通に高校レベルの対数方程式を解けばわかる。
ex1.16
単純にfast-exptを活かしてiterativeにしたexpt。
そのまんまですね。
(define (expt3 b n) (define (expt-iter a b n) (cond ((= n 0) a) ((even? n) (expt-iter (sq a) b (/ n 2))) (else (expt-iter (* a b) b (- n 1))))) (expt-iter 1 b n))
ex1.17
こっちも同じように。
(define (mult a b) (define (mult-iter a b x) (cond ((= b 0) x) ((even? b) (mult-iter a (/ b 2) (double x))) (else (mult-iter a (- b 1) (+ a x))))) (define (double x) (+ x x)) (mult-iter a b 0))