## Sunday, May 16, 2010

### SICP Exercise 1.34: Procedures as Arguments

From SICP section 1.3.2 Constructing Procedures Using Lambda

Exercise 1.34 asks us to consider the following procedure:
(define (f g)  (g 2))

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)4> (f (lambda (z) (* z (+ z 1))))6

We're then asked to consider what would happen if we applied f to itself.
> (f f). . procedure application: expected procedure, given: 2; arguments were: 2

We can use the substitution model to explain this failure.
(f f)(f 2)(2 2)

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.

Related:

For links to all of the SICP lecture notes and exercises that I've done so far, see The SICP Challenge.