Node:Procedures, Next:Conditionals, Previous:Procedure calls, Up:Primitive expression types
lambda <formals> <body> | syntax |
Syntax: <Formals> should be a formal arguments list as described below, and <body> should be a sequence of 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, the corresponding actual argument values will be stored
in those locations, and the expressions in the body of the lambda expression
will be evaluated sequentially in the extended environment.
The result(s) of the last expression in the body will be returned as
the result(s) 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> should 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 |