One must decide, based on the value of:
(test 0 (p))
where test is defined as :
(define (test x y)
(if (= x 0)
0
y))
and p is defined as :
(define (p) (p))
When I evaluate (test 0 (p))
the interpreter goes into an infinite loop, suggesting that it is evaluating p
. This shows normal-order evaluation, because the operands are evaluated before being substituted for parameters. SICP says LISP uses applicative-order evaluation.