It is an error
Here's a list of places where R7RS-small says something "is an error". The names in brackets represent a rough-and-ready classification of these errors, and don't constitute a proposal. The list is [domain], [mismatch], [syntax], [read], [immutable], [undefined], [non-continuable].
- 3.2 procedure domain errors [domain]
- 3.2 too many or too few arguments [mismatch]
- 3.3. reuse of auxiliary syntax [syntax]
- 3.3. violation of start-end constraints [domain]
- 4 non-numeric datum labels [read]
- 4 forward references in datum labels [read]
- 4 recursion in datum labels [read]
- 4 circular code [syntax]
- 4 violations of immutability [immutable]
- 1.1 references to undefined variables [undefined]
- 1.3 () as code [syntax]
- 1.4. repeated variables in lambda lists [syntax]
- 1.6 set! of unbound variable [undefined]
- 2.1 => in cond or case doesn't accept one argument [domain]
- 2.1 duplicated case keys [syntax]
- 2.2 repeated variables in let, letrec, let-values, let-values* lists or equivalent internal variable definitions [syntax]
- 2.2 direct recursion in letrec or letrec* or equivalent internal variable definitions [syntax]
- 2.2 mismatch between let-values formals and returned values [mismatch]
- 2.4 repeated variables in do [syntax]
- 2.6 non-parameter in parameterize [domain]
- 2.8 unquote-splicing of a non-list [domain]
- 2.9 uncaught case in case-lambda [mismatch]
- 3.1 repeated keywords in let-syntax [syntax]
- 3.2 non-identifiers in syntax-rules [syntax]
- 3.2 repeated pattern variable in syntax-rules [syntax]
- 3.2 unhandled syntax in syntax-rules [syntax]
- 3.2 unreconstructible syntax-rules output [syntax]
- 2 unknown identifiers in only, except, rename import specs [syntax]
- 2 importing an identifier more than once with different bindings [syntax]
- 2 redefining or mutating imported bindings [syntax]
- 2 referring to unimported identifiers [syntax]
- 3.3 duplicate variables in define-values [syntax]
- 4 use of a syntax keyword before its definition [syntax]
- 4 hopelessly muddled or ambiguous definitions [syntax]
- 5 duplicate field names in records [syntax]
- 5 undefined field name in record constructor [syntax]
- 5 invoke record accessor or mutator on record of wrong type [domain]
- 2.3 use anything but an exact integer as a container index [domain]
- 2.6 division by exact 0 [domain]
- 2.7 unusual conversion radix [domain]
- 2.7 impossible conversion from number to string [domain]
- 4 car or cdr of non-list [domain]
- 4 list-ref, list-set!, list-tail invalid index [domain]
- 4 alist is not an alist [domain]
- 4 attempt to copy a circular list [domain]
- 5 mutating symbol names [immutable]
- 7 violate forbidden-character restrictions [domain]
- 7 string-ref, string-set! invalid index [domain]
- 7 attempt to convert non-character to string or to fill string with non-character [domain]
- 7 violate string-copy! restrictions [domain]
- 8 vector-ref, vector-set! invalid index [domain]
- 8 violate vector-copy! restrictions [domain]
- 9 bytevector-u8-ref, byte-vector-u8-set! invalid index [domain]
- 9 violate bytevector-copy! restrictions [domain]
- 9 invalid UTF-8 byte sequences in utf8->string [domain]
- 10 mapping procedures must accept as many containers as are available [domain]
- 10 lists being mapped must not all be circular [domain]
- 10 mapping procedures must not mutate inputs [immutable]
- 10 call/cc must accept one argument [domain]
- 10 with-exception-handler handler and thunk arguments must accept a condition object and no arguments respectively [domain]
- 11 attempt to continue from a non-continuable exception [non-continuable]
- 13.1 procedure passed to a call procedure must accept one argument [domain]
- 13.1 trying to get a string or bytevector out of a port that is not a string or bytevector port [domain]
- 13.2 attempt operations on a closed port [closed]
- 14 file names must be strings [file]
- 14 attempt to mutate command-line strings [immutable]
- 14 indecipherable environment variable [domain]
- 14 attempt to mutate environment variables or values or features [immutable]
- 1 identifier starting with a combining character [read]
Implementation restrictions
And here's a list of places where R7RS-small speaks of implementation restrictions:
- 3.2 out of memory
- 3.2 overly large exact number
- 2.2 incomplete numeric tower
- 2.2 cannot produce exact result of arithmetic operation
- 2.6 max or min needs to report an inexact number but cannot
- 2.6 inexact or exact conversion can't represent result