(define (p) (p)) (define (test x y) (if (= x 0) 0 y)) (test 0 (p)) If the interpreter uses applicative order application, it will hang in an infinite loop. The interpreter it will attempt to evaluate (p) before evaluating the body of test, (p) evaluates to itself which causes the interpreter to recurse forever. If the interpreter uses normal order application, (test 0 (p)) evaluates to 0. The interpreter will start evaluating (test 0 (p)) by expanding the body to: (if (= 0 0) 0 (p)) The special form if will evaluate the predicate (= 0 0) as true and then evaluate the consequent expression 0.