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