Previous: , Up: srfi error-reporting   [Index]


2.12.4 Specification

Function: error reason [arg1 [arg2 ...]])

The argument reason should be a string. The procedure error will signal an error, as described in R5RS, and it will report the message reason and the objects arg1, arg2, ...

What exactly constitutes “signalling” and “reporting” is not prescribed, because of the large variation in Scheme systems. So it is left to the implementor to do something reasonable. To that end, a few examples of possible behaviour are given.

  1. Display reason and arg1... on the screen and terminate the Scheme program. This might be suitable for a Scheme system implemented as a batch compiler.
  2. Display reason and arg1... on the screen and go back to the read–evaluate–print loop. This might be suitable for an interactive implementation.
  3. In the case of a multi–threaded system: terminate the current thread, but do not terminate the other threads. Possibly make the arguments to error available to other threads in some way. See the thread-join! mechanism in SRFI-18 on how this could be done.
  4. Package reason and arg1... up into an error object and pass this error object to an exception handler. The default exception handler then might do something as described in points 1 to 3.
  5. In the case of a Scheme system that runs completely unattended and that has no way to notify a human, the only reasonable course of action might be to do nothing at all. However, this should be considered a last resort. Clearly, if all implementors would choose this strategy, this SRFI would not be very useful.

An implementation might report more information than just reason and arg1... For instance, it might report the procedure name in which the error occured or even print a stack trace. However, this will require additional support in the Scheme implementation.

Why error is a procedure

It is conceivable to allow error to be a special form, such as a macro, rather than a procedure. This might make providing information such as the source code location easier. This possibility has been considered, but rejected, for two reasons.

  1. Since error accepts a variable number of arguments, it could occasionally be useful to use apply to call error. However, this is not possible if error was allowed to be a special form.
  2. Since error is currently a procedure in all Scheme implementations mentioned above, it doesn’t seem all that worthwhile to allow it to be a special form.

Previous: , Up: srfi error-reporting   [Index]