5. R5Rs Scheme Revised(5) Report on the Algorithmic Language Scheme -- Program structure |
|
A Scheme program consists of a sequence of expressions, definitions,
and syntax definitions.
Expressions are described in chapter Expressions;
definitions and syntax definitions are the subject of the rest of the
present chapter. Programs are typically stored in files or entered interactively to a running Scheme system, although other paradigms are possible; questions of user interface lie outside the scope of this report. (Indeed, Scheme would still be useful as a notation for expressing computational methods even in the absence of a mechanical implementation.) Definitions and syntax definitions occurring at the top level of a program can be interpreted declaratively. They cause bindings to be created in the top level environment or modify the value of existing top-level bindings. Expressions occurring at the top level of a program are interpreted imperatively; they are executed in order when the program is invoked or loaded, and typically perform some kind of initialization. At the top level of a program (begin <form1> ...,) is equivalent to the sequence of expressions, definitions, and syntax definitions that form the body of the begin .
Definitions are valid in some, but not all, contexts where expressions
are allowed. They are valid only at the top level of a <program>
and at the beginning of a <body>. A definition should have one of the following forms:
At the top level of a program, a definition
Definitions may occur at the
beginning of a <body> (that is, the body of a
lambda ,
let , let* , letrec , let-syntax , or letrec-syntax
expression or that of a definition of an appropriate form).
Such definitions are known as internal definitions as opposed to the top level definitions described above.
The variable defined by an internal definition is local to the
<body>. That is, <variable> is bound rather than assigned,
and the region of the binding is the entire <body>. For example,
Wherever an internal definition may occur (begin <definition1> ...,) is equivalent to the sequence of definitions that form the body of the begin .
Syntax definitions are valid only at the top level of a <program>. They have the following form: (define-syntax <keyword> <transformer spec>) <Keyword> is an identifier, and the <transformer spec> should be an instance of syntax-rules .
The top-level syntactic environment is extended by binding the
<keyword> to the specified transformer.There is no define-syntax analogue of internal definitions. Although macros may expand into definitions and syntax definitions in any context that permits them, it is an error for a definition or syntax definition to shadow a syntactic keyword whose meaning is needed to determine whether some form in the group of forms that contains the shadowing definition is in fact a definition, or, for internal definitions, is needed to determine the boundary between the group and the expressions that follow the group. For example, the following are errors:
|
This Html page has been produced by
Skribe.
Last update Sun Dec 31 08:32:06 2017.