Next: , Up: Standard Pre-Scheme environment


9.3.1 Scheme bindings

Bindings for all the names specified here from R5RS Scheme are available in Pre-Scheme. The remainder of the sections after this one detail Pre-Scheme specifics that are not a part of Scheme.

— syntax: define name value
— syntax: define (name . argument-list) value
— syntax: if condition consequent [alternate]
— syntax: let ((name expression) ...) body
— syntax: let* ((name expression) ...) body
— syntax: and conjunct ...
— syntax: or disjunct ...
— syntax: cond cond-clause ...
— syntax: do ((name init-exp [step-exp]) ...) (test-exp [return-exp]) body

These special forms & macros are all unchanged from their R5RS specifications.

— syntax: define-syntax name transformer-expression [aux-names]
— syntax: let-syntax ((name transformer-expression) ...) body
— syntax: letrec-syntax ((name transformer-expression) ...) body

Pre-Scheme's macro facility is exactly the same as Scheme48's. Transformer-expression may be either a syntax-rules or an explicit renaming transformer, just as in Scheme48; in the latter case, it is evaluated either in a standard Scheme environment or however the for-syntax clause specified of the package in whose code the transformer appeared. For details on the extra aux-names operand to define-syntax, see Explicit renaming macros.

— procedure: not boolean –> boolean
— procedure: eq? valuea valueb –> boolean
— procedure: char=? chara charb –> boolean
— procedure: char<? chara charb –> boolean
— procedure: values value ... –> values
— procedure: call-with-values producer consumer –> values
— procedure: current-input-port –> input-port
— procedure: current-output-port –> input-port

These procedures are all unchanged from their R5RS specifications.

— procedure: + addend ... –> integer
— procedure: - integer –> integer
— procedure: - minuend subtrahend –> integer
— procedure: * multiplicand ... –> integer
— procedure: = integera integerb –> boolean
— procedure: < integera integerb –> boolean
— procedure: > integera integerb –> boolean
— procedure: <= integera integerb –> boolean
— procedure: >= integera integerb –> boolean
— procedure: min integer1 integer2 ... –> integer
— procedure: max integer1 integer2 ... –> integer
— procedure: abs integer –> integer
— procedure: quotient divisor dividend –> integer
— procedure: remainder divisor dividend –> integer
— procedure: expt base exponent –> integer

These numerical operations are all unchanged from their R5RS counterparts, except that they are applicable only to fixnums, not to flonums, and they always return fixnums.