Exercise 1.6: (back)
General:
Computing the square roots with new-if causes the program run an infinite loop. This is because the new-if function uses applicative order evaluation, which evaluates both the operand and the operator. The if form on the other hand is a special form that evaluates the <predicate> part of the expression first. If the <predicate> evaluates to a true value, the interpreter then evaluates the <consequent> and returns its value.