(lambda ⟨formals⟩ ⟨body⟩) ¶Syntax: ⟨Formals⟩ is a formal arguments list as described below, and ⟨body⟩ is a sequence of zero or more definitions followed by one or more expressions.
Semantics: A lambda expression evaluates to a procedure. The
environment in effect when the lambda expression was evaluated is
remembered as part of the procedure. When the procedure is later called
with some actual arguments, the environment in which the lambda
expression was evaluated will be extended by binding the variables in
the formal argument list to fresh locations, and the corresponding
actual argument values will be stored in those locations. (A
fresh location is one that is distinct from every previously
existing location.) Next, the expressions in the body of the
lambda expression (which, if it contains definitions, represents
a letrec* form — see Binding constructs) will be evaluated
sequentially in the extended environment. The results of the last
expression in the body will be returned as the results of the procedure
call.
(lambda (x) (+ x x)) ⇒ a procedure ((lambda (x) (+ x x)) 4) ⇒ 8
(define reverse-subtract (lambda (x y) (- y x))) (reverse-subtract 7 10) ⇒ 3
(define add4 (let ((x 4)) (lambda (y) (+ x y)))) (add4 6) ⇒ 10
⟨Formals⟩ have one of the following forms:
It is an error for a ⟨variable⟩ to appear more than once in ⟨formals⟩.
((lambda x x) 3 4 5 6) ⇒ (3 4 5 6) ((lambda (x y . z) z) 3 4 5 6) ⇒ (5 6)
Each procedure created as the result of evaluating a lambda
expression is (conceptually) tagged with a storage location, in order to
make eqv? and eq? work on procedures (see Equivalence predicates).