title: Normal order vs Applicative order in Scheme
body: <p>I got this program:</p>
  
  <pre><code>(define a 2)
  
  (define (goo x)
    (display x) (newline)
    (lambda (y) (/ x y)))
  
  (define (foo x)
    (let ((f (goo a)))
      (if (= x 0)
          x
          (f x))))
  </code></pre>
  
  <p>and I asked to compare the evaluation results between the applicative and normal order on the expression <code>(foo (foo 0))</code>.</p>
  
  <p>As I know, in applicative order, <code>(display x)</code> in function <code>goo</code> will print <code>x</code> and after it the program will collapse because <code>y</code> isn't defined. But when I run it in Scheme nothing happens. What is the reason?</p>