Scheme has a special form that is very special, called
It creates a first-class procedure and returns a pointer to it.
For example, you can create a procedure that doubles its argument
by evaluating the expression
(lambda (x) (+ x x)). The
second subform of the expression is a list of formal arguments,
and the third subform is the body of the procedure.
lambda doesn't give a name to the procedure it creates--it just
returns a pointer to the procedure object.
Actually, the procedure-defining variant of
define is exactly
equivalent to a variable-defining
define, with a
expression as its initial value form.
(define (double x) (+ x x))
is exactly equivalent to
(define double (lambda (x) (+ x x)))
In either case, we're creating a one-argument procedure, and we're also
defining and binding a variable named
double, and initializing
its storage with a pointer to the procedure.
The procedure-defining syntax for
define is just syntactic
sugar--there's nothing you can do with it that you can't do with
local variables and
lambda. It's just a more convenient
notation for the same thing.
================================================================== This is the end of Hunk K. TIME TO TRY IT OUT At this point, you should go read Hunk L of the next chapter and work through the examples using a running Scheme system. Then return here and resume this chapter. ==================================================================
(Go to Hunk L, which starts at section Using First-Class, Higher-Order, and Anonymous Procedures (Hunk L).)