Node: Variables; syntactic keywords; and regions, Next: Disjointness of types, Previous: Basic concepts, Up: Basic concepts
An identifier may name a type of syntax, or it may name a location where a value can be stored. An identifier that names a type of syntax is called a syntactic keyword and is said to be bound to that syntax. An identifier that names a location is called a variable and is said to be bound to that location. The set of all visible bindings in effect at some point in a program is known as the environment in effect at that point. The value stored in the location to which a variable is bound is called the variable's value. By abuse of terminology, the variable is sometimes said to name the value or to be bound to the value. This is not quite accurate, but confusion rarely results from this practice.
Certain expression types are used to create new kinds of syntax and bind syntactic keywords to those new syntaxes, while other expression types create new locations and bind variables to those locations. These expression types are called binding constructs.
Those that bind syntactic keywords are listed in section Macros.
The most fundamental of the variable binding constructs is the
lambda
expression, because all other variable binding constructs
can be explained in terms of lambda
expressions. The other
variable binding constructs are let
, let*
, letrec
,
and do
expressions (see sections see Procedures, see Binding constructs, and
see Iteration).
Like Algol and Pascal, and unlike most other dialects of Lisp
except for Common Lisp, Scheme is a statically scoped language with
block structure. To each place where an identifier is bound in a program
there corresponds a region of the program text within which
the binding is visible. The region is determined by the particular
binding construct that establishes the binding; if the binding is
established by a lambda
expression, for example, then its region
is the entire lambda
expression. Every mention of an identifier
refers to the binding of the identifier that established the
innermost of the regions containing the use. If there is no binding of
the identifier whose region contains the use, then the use refers to the
binding for the variable in the top level environment, if any
(chapters see Expressions and see Standard procedures); if there is no
binding for the identifier,
it is said to be unbound.