Confirmed deviations
Identifiers are by default case-sensitive (see
Compiler command line format).
[4.1.3] The maximal number of arguments that may be passed to a
compiled procedure or macro is 120. (However, a macro-definition
that has a single rest-parameter can have any number of arguments.)
Likewise, [6.4] the maximum number of values that can be passed
to continuations captured using call-with-current-continuation
is 120. This is an implementation restriction that is unlikely
to be lifted.
[6.2.5] The numerator and denominator procedures cannot be
applied to inexact numbers, and the procedure rationalize is not
implemented at all. This will be fixed in a later release.
[6.2.4] The runtime system uses the numerical string-conversion
routines of the underlying C library and so does only understand
standard (C-library) syntax for floating-point constants. Consequently,
the procedures [6.2.6] string->number, [6.6.2] read,
[6.6.3] write, and [6.6.3] display do not obey
read/write invariance to inexact numbers.
[6.5] Code evaluated in scheme-report-environment or
null-environment still sees non-standard syntax.
Unconfirmed deviations
[6.6.2] The procedure char-ready? always returns #t for
terminal ports.
Doubtful deviations
[4.2.2] letrec does evaluate the initial values for the bound
variables sequentially and not in parallel, that is:
(letrec ((x 1) (y 2)) (cons x y))
is equivalent to
(let ((x (void)) (y (void)))
(set! x 1)
(set! y 2)
(cons x y) )
where R5RS requires
(let ((x (void)) (y (void)))
(let ((tmp1 1) (tmp2 2))
(set! x tmp1)
(set! y tmp2)
(cons x y) ) )
It is unclear whether R5RS permits this behavior or not; in any case,
this only affects letrecs where the bound values are not
lambda-expressions.
Non-deviations that might surprise you
[6.1] equal? compares all structured data recursively, while R5RS
specifies that eqv? is used for data other than pairs, strings and
vectors. However, R5RS does not dictate the treatment of data types
that are not specified by R5RS.
[6.2.5] There is no built-in support for exact rationals, complex
numbers or extended-precision integers (bignums). The routines
complex?, real? and rational? are identical to
the standard procedure number?. The procedures make-rectangular
and make-polar are not implemented. Fixnums are limited to
±230
(or ±262
on 64-bit hardware). Support for the full numeric tower is available
as a separate package, provided the GNU multiprecision library is installed.
[6.2.6] The procedure string->number does not obey read/write
invariance on inexact numbers.
[6.4] The maximum number of values that can be passed to continuations
captured using call-with-current-continuation is 120.
[6.5] Code evaluated in scheme-report-environment or
null-environment still sees non-standard syntax.
[6.6.2] The procedure char-ready? always returns #t for
terminal ports. The procedure read does not obey read/write
invariance on inexact numbers.
[6.6.3] The procedures write and display do not obey
read/write invariance to inexact numbers.
[6.6.4] The transcript-on and transcript-off procedures are
not implemented. R5RS does not require them.
Previous: Supported language
Next: Extensions to the standard