title: What's the explanation for Exercise 1.6 in SICP?
body: <p>I'm just beginning to work through SICP (on my own; this isn't for a class), and I've been struggling with Exercise 1.6 for a couple of days and I just can't seem to figure it out.  This is the one where Alyssa re-defines <code>if</code> in terms of <code>cond</code>, like so:</p>
  
  <pre><code>(define (new-if predicate then-clause else-clause)
      (cond (predicate then-clause)
            (else else-clause))
  </code></pre>
  
  <p>She tests it successfully on some simple cases, and then uses it to re-write the square root program (which worked just fine with <code>if</code>):</p>
  
  <pre><code>(define (sqrt-iter guess x)
      (new-if (good-enough? guess x)
              guess
              (sqrt-iter (improve guess x)
                         x)))
  </code></pre>
  
  <p>The question then asks: "What happens when Alyssa attempts to use this to compute square roots?  Explain." [If necessary, I'm happy to reproduce the other procedures (<code>good-enough?</code>, <code>improve</code>, etc.), just let me know.]</p>
  
  <p>Now, I know what happens: it never returns a value, which means that the program recurses  infinitely.  I just can't explain why this happens.  Whatever subtle difference exists between <code>if</code> and <code>new-if</code> is eluding me.  Any and all help much appreciated.</p>