wiki:ErrorSituations

Version 1 (modified by alexshinn, 7 years ago) (diff)

adding list of R5RS error situations

The following is a list of all error situations in R5RS, originally collected in a post by Will Clinger to the R6RS editors list.


  • It is an error to attempt to store a new value into a location that is denoted by an immutable object.
  • For example, it is an error for a procedure to be passed an argument that the procedure is not explicitly specified to handle, even though such domain errors are seldom mentioned in this report. Implementations may extend a procedure's domain of definition to include such arguments.
  • It is an error to reference an unbound variable.
  • ...it is an error to alter a constant (i.e. the value of a literal expression) using a mutation procedure like set-car! or string-set!.
  • It is an error for a <variable> to appear more than once in <formals>.
  • It is an error for a <variable> to appear more than once in the list of variables being bound.
  • It is an error for a <variable> to appear more than once in the list of variables being bound.
  • One restriction on letrec is very important: it must be possible to evaluate each <init> without assigning or referring to the value of any <variable>. If this restriction is violated, then it is an error.
  • It is an error for a <variable> to appear more than once in the list of do variables.
  • It is an error for a <keyword> to appear more than once in the list of keywords being bound.
  • It is an error for the same pattern variable to appear more than once in a <pattern>.
  • A subpattern followed by <tt>...</tt> can match zero or more elements of the input. It is an error for <tt>...</tt> to appear in <literals>. Within a pattern the identifier <tt>...</tt> must follow the last element of a nonempty sequence of subpatterns.
  • It is an error to use a macro keyword, within the scope of its binding, in an expression that does not match any of the patterns.
  • It is an error if the output cannot be built up as specified.
  • If <variable> is not bound, however, then the definition will bind <variable> to a new location before performing the assignment, whereas it would be an error to perform a <tt>set!</tt> on an unbound variable.
  • Although macros may expand into definitions and syntax definitions in any context that permits them, it is an error for a definition or syntax definition to shadow a syntactic keyword whose meaning is needed to determine whether some form in the group of forms that contains the shadowing definition is in fact a definition, or, for internal definitions,
  • Since it is an error to modify constant objects (those returned by literal expressions), implementations are permitted, though not required, to share structure between constants where appropriate. Thus the value of <tt>eqv?</tt> on constants is sometimes implementation-dependent.<p>
  • The <tt>length</tt>, <tt>vector-length</tt>, and <tt>string-length</tt> procedures must return an exact integer, and it is an error to use anything but an exact integer as an index.
  • It is an error if no possible result makes this expression true.
  • The error case can occur only when z is not a complex number or is a complex number with a non-rational real or imaginary part.
  • Note that it is an error to take the car of the empty list.
  • Note that it is an error to take the cdr of the empty list.
  • It is an error if list has fewer than k elements.
  • It is an error if list has fewer than k elements.
  • It is an error to apply mutation procedures like <tt>string-set!</tt> to strings returned by this procedure.
  • If a file with the given name already exists, the effect is unspecified.
  • It is an error to read from a closed port.