You are looking at historical revision 16944 of this page. It may differ significantly from its current revision.

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

[4.3.1] let-syntax and letrec-syntax introduce a new scope.

[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.6.4] The transcript-on and transcript-off procedures are not implemented. R5RS does not require them.

Previous: The R5RS standard

Next: Extensions to the standard