Next: scheme overview assignment, Previous: scheme overview procedures, Up: scheme overview [Index]
Whereas (+ 23 42)
, (f 23)
, and ((lambda (x) (+ x
42)) 23)
are all examples of procedure calls, lambda
and
let
expressions are not. This is because let
, even though
it is an identifier, is not a variable, but is instead a syntactic
keyword. A form that has a syntactic keyword as its first
subexpression obeys special rules determined by the keyword. The
let
identifier in a definition is also a syntactic keyword.
Hence, definitions are also not procedure calls.
The rules for the lambda
keyword specify that the first subform
is a list of parameters, and the remaining subforms are the body of the
procedure. In let
expressions, the first subform is a list of
binding specifications, and the remaining subforms constitute a body of
expressions.
Procedure calls can generally be distinguished from these special forms by looking for a syntactic keyword in the first position of a form: if the first position does not contain a syntactic keyword, the expression is a procedure call. (So–called identifier macros allow creating other kinds of special forms, but are comparatively rare.) The set of syntactic keywords of Scheme is fairly small, which usually makes this task fairly simple. It is possible, however, to create new bindings for syntactic keywords. Derived forms and macros