Exercise 1.34 of SICP

Exercise 1.34: Suppose we define the procedure

(define (f g)
  (g 2))

Then we have

(f square)
4

(f (lambda (z) (* z (+ z 1))))
6

What happens if we (perversely) ask the interpreter to evaluate the combination (f f)? Explain.

(f f)
_ *** ERROR -- Operator is not a PROCEDURE_

The reasons this happens if clearer once we trace the evaluation steps:

(f f)
(f 2)
(2 2)

Since the leftmost side is not an operator but a number the interpreter doesn’t know what to do and hence gives the error above.