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 ±2^{30} (or ±2^{62} 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