Next: Disjointness of types, Up: Basic concepts [Index]
An identifier can name either a type of syntax or 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 a transformer for 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 to
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 Macros. The most
fundamental of the variable binding constructs is the lambda
expression, because all other variable binding constructs (except
top-level bindings) can be explained in terms of lambda
expressions. The other variable binding constructs are let
,
let*
, letrec
, letrec*
, let-values
,
let*-values
, and do
expressions (see Procedures,
Binding constructs, and Iteration).
Scheme is a 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 global environment, if any (Expressions and
Standard procedures); if there is no binding for the identifier,
it is said to be unbound.
Next: Disjointness of types, Up: Basic concepts [Index]