title: Does the DrRacket interpreter use normal-order evaluation based on SICP Exercise 1.5?
body: <p>One must decide, based on the value of:</p>
  
  <blockquote>
    <p>(test 0 (p))</p>
  </blockquote>
  
  <p>where test is defined as :</p>
  
  <pre><code>(define (test x y)
    (if (= x 0)
        0
        y))
  </code></pre>
  
  <p>and p is defined as :</p>
  
  <pre><code>(define (p) (p))
  </code></pre>
  
  <p>When I evaluate <code>(test 0 (p))</code> the interpreter goes into an infinite loop, suggesting that it is evaluating <code>p</code>. This shows <strong><em>normal-order evaluation</em></strong>, because the operands are evaluated before being substituted for parameters. SICP says LISP uses applicative-order evaluation.</p>