ポーカー、プログラミング、もぐ

ポーカーとプログラミングともぐもぐについてのブログ。

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