[[tags: manual]]

== Confirmed deviations

Identifiers are by default case-sensitive (see
[[http://galinha.ucpel.tche.br:8080/Using%20the%20compiler#Compiler%20command%20line%20format|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<nowiki><sup>30</sup></nowiki> (or ±2<nowiki><sup>62</sup></nowiki>
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]]
