2.12.2008

SICP読んでみる。

休みに入った学生というのは、こたつの中で成績発表までガクブルしながらすごすしかないわけで。
やっぱり時間が空くと、ついついゲームとかそんなものに手が伸びてしまうわけです。
(最近のお気に入りは ょすみん。です。時間を忘れて遊んでしまうので、クリックする時はご注意を。
そして、全く、実に、本当にどうでもいいことなんですが、niftyに設置してあるょすみん。は、自分がtext/htmlだと言って来るんです。
まぁ、ソースの中ほどで頑張ってるembedタグ周辺が問題なんでしょうけど。少なくとも、我が家のFirefoxではプレイすることが出来ません。天下のniftyがここまでとはねぇ・・・)

おいとき。

そんなふうに時間をつぶしても仕方が無いので、図書館からStructure and Interpetation of Computer Programming.(スペルあってる?)通称SICPの原著と訳書を借りてきました。
原著を借りてきたのは、訳書の訳が酷いなんて話を聞いたからですが、今のところ、カタカナ語でよさそうな用語をそのまま用いず、律儀に訳してたり、平方根はこう求まる!的な部分の訳が不自然と感じる意外はそれなりに読めてます。
もっと読むとあらが目立ってくるのかなぁ。とも思いますが、思っていたほど酷くなくて一安心です。

そんなわけで、読書日記をつけてみることにしました。
といっても、読書記録は日々ログ(要するにローカルな日記)に保存してあるので、こちらはその焼き直しということになるのですが。

で、現在は演習問題1.7を解いたところ。私の解はこちら。

;; SICP 問題1.7
;; guessと直前のguessの差を使って計算するプログラム
(define (sqrt-iter pre-guess guess x)
(if (good-enough? pre-guess guess)
guess
(sqrt-iter guess (improve guess x)
x)))

(define (improve guess x)
(average guess (/ x guess)))

(define (average x y)
(/ (+ x y) 2))

; 直前の予測値(pre-guess)と、今の予測値(guess)との差が十分に小さければ#t
(define (good-enough? pre-guess guess)
(< (abs (- pre-guess guess)) 0.001))

(define (abs v)
(if (< v 0)
(- v)
v))

(define (my-sqrt x)
(sqrt-iter 0.0 1.0 x))

はてなだと勝手に色付けとかしてくれるオプションが存在するらしいけど、bloggerじゃ無いだろうなw
スクリプトでも書いて作ったら便利かなぁ?でも、書くに至らないっていうのは、自分でそれほど必要としてないだろうからだな。

1.6の解答がいまいちよく分からないのだけれども、
「スペシャルフォームなifじゃないから、その引数は渡される時点で評価されるために、思ったとおりに実行されない」
でいいのかなぁ?どなたか詳しい解答をご存知でしたら教えてプリーズです。

さて、この読書、休み終了までに終わるか否か。
一応SICPタグを付けて日々の日記と分けていくつもりですので、もし皆さんの中でSICPにチャレンジしている方がいらっしゃれば、いっしょに頑張りましょう。

0 件のコメント: