Exercise 1.34 asks us to consider the following procedure:
(define (f g)
This procedure takes a function as an argument and applies that function to the value 2. We're shown a couple of examples of the procedure in action.
> (f square)
> (f (lambda (z) (* z (+ z 1))))
We're then asked to consider what would happen if we applied
> (f f)
. . procedure application: expected procedure, given: 2; arguments were: 2
We can use the substitution model to explain this failure.
In the first substitution the argument
f(a procedure) is applied to the value 2, so a recursive call is made. In the second substitution, the argument 2 is applied to 2. Since 2 isn't a procedure, an error is reported.
For links to all of the SICP lecture notes and exercises that I've done so far, see The SICP Challenge.