SICP問題1.6

いきなりつまづいた。

(define (sqrt-iter y x)
        (if (good-enough y x)
             y
            (sqrt-iter (improve y x) x)))

のifを

(define (new-if predicate then-clause else-clause)
        (cond (predicate then-clause)
              (else else-clause)))

を使って置き換えた

(define (new-sqrt-iter y x)
        (new-if (good-enough y x)
             y
            (new-sqrt-iter (improve y x) x)))

がどういう動作をするかっていう問題だが…

何で無限ループにはまるのかわからない。

考えられるのは

        (new-if (good-enough y x)

が常に#fになって再帰がループになってることだけど…
それとも、
帰ってくる値は関係なく再帰になってるのか?

ちなみに

(define (good-enough guess x)
       (< (abs (- (square guess) x)) 0.001))