1 Welcome to PLT Scheme
2 Scheme Essentials
3 Built-In Datatypes
4 Expressions and Definitions
5 Programmer-Defined Datatypes
6 Modules
7 Contracts
8 Input and Output
9 Regular Expressions
10 Exceptions and Control
11 Iterations and Comprehensions
12 Pattern Matching
13 Classes and Objects
14 Units (Components)
15 Reflection and Dynamic Evaluation
16 Macros
17 Performance
18 Running and Creating Executables
19 Compilation and Configuration
20 More Libraries
Bibliography
Index
Version: 4.0.2

 

4.1 Notation

This chapter (and the rest of the documentation) uses a slightly different notation than the character-based grammars of the Scheme Essentials chapter. The grammar for a use of a syntactic form something is shown like this:

(something [id ...+] an-expr ...)

The italicized meta-variables in this specification, such as id and an-expr, use the syntax of Scheme identifiers, so an-expr is one meta-variable. A naming convention implicitly defines the meaning of many meta-variables:

Square brackets in the grammar indicate a parenthesized sequence of forms, where square brackets are normally used (by convention). That is, square brackets do not mean optional parts of the syntactic form.

A ... indicates zero or more repetitions of the preceding form, and ...+ indicates one or more repetitions of the preceding datum. Otherwise, non-italicized identifiers stand for themselves.

Based on the above grammar, then, here are a few conforming uses of something:

  (something [x])

  (something [x] (+ 1 2))

  (something [x my-favorite-martian x] (+ 1 2) #f)

Some syntactic-form specifications refer to meta-variables that are not implicitly defined and not previously defined. Such meta-variables are defined after the main form, using a BNF-like format for alternatives:

(something-else [thing ...+] an-expr ...)

 

thing

 

=

 

thing-id

 

 

|

 

thing-keyword

The above example says that, within a something-else form, a thing is either an identifier or a keyword.