私はちょうど SICP の作業を始めたところです (これはクラス用ではありません)。演習 1.6 で数日間苦労してきましたが、まったく理解できないようです。ifこれは、Alyssaが に関して次のcondように再定義したものです。
(define (new-if predicate then-clause else-clause)
(cond (predicate then-clause)
(else else-clause))
彼女はそれをいくつかの単純なケースでうまくテストし、それを使って平方根プログラムを書き直しました (これは でうまくいきましたif):
(define (sqrt-iter guess x)
(new-if (good-enough? guess x)
guess
(sqrt-iter (improve guess x)
x)))
次に、「アリッサがこれを使用して平方根を計算しようとするとどうなりますか?説明してください。」という質問が表示されます。good-enough?[必要に応じて、他の手順 ( 、など)を再現improveさせていただきます。お知らせください。]
これで、何が起こるかわかりました。値を返すことはありません。つまり、プログラムは無限に再帰します。なぜこれが起こるのか説明できません。ifとの間に存在する微妙な違いが何であれ、new-if私を逃れています。ありとあらゆる助けが大歓迎です。