Feature-based program configuration language
Richard Kelsey, ported to chicken by felix-winkelmann.
- (program PROGRAM-CLAUSE ...)syntax
Expands into a program according to the specifications given in PROGRAM-CLAUSE ....
<program> --> (program <program clause>+)
<program clause> --> (requires <feature identifier>+) | (files <filename>*) | (code <Scheme expression, definition, or syntax definition>*) | (feature-cond <feature-cond clause>+) | (feature-cond <feature-cond clause>* (else <program clause>+))
<feature-cond clause> --> (<feature requirement> <program clause>+)
<feature requirement> --> <feature identifier> | (and <feature requirement>*) | (or <feature requirement>*) | (not <feature requirement>)
<feature identifier> --> a symbol which is the name of a SRFI
The meanings of the different <program> clauses are given below. The ordering of the clauses in a <program> determines the order of the forms in the resultant Scheme program.
- (requires <feature-identifier>+)
- The listed features are required by the program. If one or more is not provided by the implementation the program cannot be run.
- (files <filename>*)
- The listed files are included and the forms they contain added to the program.
- (code <body>)
- The forms in <body> are added to the program.
- (feature-cond <feature-cond clause>+)
- The meaning of a FEATURE-COND clause is that of the <program-clause>s in the first <feature-cond clause> whose <implementation-requirement> is satisfied by the implementation. If an ELSE clause is present it is used if and only if no preceding clause is satisfied; a FEATURE-COND with an ELSE clause is always satisfied.
If no clause can be satisified the <program> cannot be evaluated in the implementation.
The meaning of the <implementation requirement>s is as follows:
|<feature identifier>||satisfied if the feature is present|
|(and x ...)||satisfied if every X is satisfied|
|(or x ...)||satisfied if any X is satisfied|
|(not x)||satisfied if X is not satisfied|
- 0.1 - Initial release
Copyright (C) Richard Kelsey (1999). All Rights Reserved.
This document and translations of it may be copied and furnished to others, and derivative works that comment on or otherwise explain it or assist in its implementation may be prepared, copied, published and distributed, in whole or in part, without restriction of any kind, provided that the above copyright notice and this paragraph are included on all such copies and derivative works. However, this document itself may not be modified in any way, such as by removing the copyright notice or references to the Scheme Request For Implementation process or editors, except as needed for the purpose of developing SRFIs in which case the procedures for copyrights defined in the SRFI process must be followed, or as required to translate it into languages other than English. The limited permissions granted above are perpetual and will not be revoked by the authors or their successors or assigns. This document and the information contained herein is provided on an ``AS IS'' basis and THE AUTHOR AND THE SRFI EDITORS DISCLAIM ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.