Hatena::Groupsicp

a666666の日記 このページをアンテナに追加 RSSフィード

2009-01-25

問題 1.1.6

23:59 | 問題 1.1.6 - a666666の日記 を含むブックマーク はてなブックマーク - 問題 1.1.6 - a666666の日記 問題 1.1.6 - a666666の日記 のブックマークコメント

cond をつかった new-if を if のかわりにつかえるか、という問題。

sicp/practice-1.6.scm at f984c0f3172fc4b6acb790085c651db627d2dfbd ? kyanny/sicp ? GitHub

まずそのまま書いて実行してみる。 sqrt-iter 以外の good-enough? とかではふつうの if を使う。

実行すると無限ループするっぽく、 CPU 99% とかで暴走する。

何がおこるか説明せよ、が問題なので説明すると、 new-if に predicate, then-clause, else-clause を渡すとそれぞれが cond に渡る前に一回評価されてしまうので、 sqrt-iter の評価が終わる前に sqrt-iter 自身を評価しにいってしまい、そこでループしてしまうのかな。だから if は特殊形式でなければならない?

new-if っていう新しい手続きを作ってしまったからそうなったのだと思う。たぶん if ではなくて(もちろん new-if でもなくて)最初から cond を使っていたらループしないはずだ。それも書いてみよう。

・・・書いてみたけど動かないな・・・風呂入ってこよう。