(define (new-if predicate then-clause else-clause) (cond (predicate then-clause) (else else-clause))) (define (sqrt-iter guess x) (new-if (good-enough? guess x) guess (sqrt-iter (improve guess x) x)))
特殊形式でないnew-ifを使うと、good-enough?の分岐前にelse-clauseが評価される。else-clauseは再帰であるために、else-clauseが評価され続ける無限ループにおちいる。