# Deviations from the standard

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. A macro-definition that has a single rest-parameter can have any number of arguments.
[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) ) )

[6.1] `equal?` compares all structured data recursively, while R5RS specifies that `eqv?` is used for data other than pairs, strings and vectors.
[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.
[6.2.5] There is no built-in support for rationals, complex numbers or extended-precision integers (bignums). The routines `complex?`, `real?` and `rational?` are identical to the standard procedure `number?`. The procedures `numerator`, `denominator`, `rationalize`, `make-rectangular` and `make-polar` are not implemented. Fixnums are limited to ±2
30
(or ±2
62
on 64-bit hardware). Support for extended numbers 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.

Previous: Supported language
Next: Extensions to the standard