SICPをやる記録 その3 1.1.7〜1.1.8
新しい訳d.hatena.ne.jp
が公開されたので、今後はそちらを使う。ありがとうございます。
あと、今回からファイルにコードを記述するようにした。
拡張子.scmとし、一行目に
#!/usr/local/bin/gosh
と書けば、
gosh ./test.scm
で実行可能。
結果を確認したいときは、
(print (function args))
でOK。
a tour of Goでもニュートン法出てきたけど、海外のこういうやつだとニュートン法をやるのが通例になっているのだろうか。
練習問題 1.6:
new-ifは自分で定義したもの。
1.1.3、 1.1.5で見るように、手続きを定義したとき、
インタプリタは組み合わせ の各要素を評価し、手続き (組合せの演算子の値) を引数 (組合せの被演算子の 値) に適用する
という評価順序になる。
sqrt-iterはnew-ifを使用しているため、new-ifの評価が無限に行われてしまう。
練習問題 1.8:
#!/usr/local/bin/gosh
(define (cubic-iter guess x) (if (good-enough? guess x)
guess
(cubic-iter (improve guess x) x)))
(define (improve guess x) (/ (+ (/ x (* guess guess)) (* 2 guess)) 3))
(define (good-enough? guess x)
(< (abs (- (* guess (* guess guess)) x)) 0.0001))
(define (cubic x) (cubic-iter 1.0 x))
(print (cubic 27)) #3.0000005410641766