1. ホーム
  2. recursion

SICPの練習問題1.6の解説は?

2023-10-09 03:20:33

質問

私はちょうどSICPをやり始めたところです(自分自身で、これはクラスのためではありません)。 これは、Alyssaが再定義した if の観点から 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)))

Alyssaがこれを使って平方根を計算しようとするとどうなりますか? 説明せよ。" [必要であれば、他の手順も再現しても構わない( good-enough? , improve など)、教えてください] 。

今、何が起こるかはわかっています:値が返らない、つまりプログラムが無限に再帰するのです。 しかし、なぜこのようなことが起こるのかを説明することができません。 という微妙な違いがあるにせよ ifnew-if がわからないのです。 任意の、すべてのヘルプは非常に感謝しています。

どのように解決するのですか?

new-if は関数です。関数が呼び出されたとき、Scheme は引数リストに対してまず何をするのでしょう。それは をすべて を評価します。