SICPを読む(7) 問題 1.6 - 1.8

vimが落ちたので、1.6 1.7のソースは略。

問題 1.6

無限ループ。ifが特殊形式の意味がわかってきた。

無限ループに入ると、vimごとkillしなければならない・・・この先不安。

問題 1.7

1.7の解答は古い値と新しい値を比べる方式。僕のは有効桁数を(/ guess 1000)しただけ。

問題 1.8 立方根を求めよ。

Newton法で展開して確認。普通にNewton法が使えるようになった。

(define (average-3 x y)
 (/ (+ x y ) 3))

(define (improve-3 guess x)
 (average-3 (/ x (* guess guess)) (* 2 guess)))

(define (good-enough-3? guess x)
 (< (abs (- (* guess guess guess) x)) (/ guess 1000)))

(define (sqrt-iter-3 guess x)
  (if (good-enough-3? guess x)
    guess
    (sqrt-iter-3 (improve-3 guess x) x)))

(define (sqrt-3 x)
 (sqrt-iter-3 1.0 x))

; test
(sqrt-3 8)
(sqrt-3 9)
(sqrt-3 (+ 100 37))
(sqrt-3 (+ (sqrt-3 2) (sqrt-3 3)))
(square (sqrt-3 1000))

う〜。解答はもっとセクシー。

cubicで3乗。cubic-rootで立方根。→立方根 - Wikipedia

つまり、sqrtはsquare-rootの略。ガーン。知らなかった・・・。

今日のリンク

Scheme:Schemeプログラマのレベル10
レベル1.5って所だな・・・。