Common Lisp the Language, 2nd Edition


next up previous contents index
Next: Non-Serious Conditions Up: Survey of Concepts Previous: Interactive Condition Handling

29.3.12. Serious Conditions

change_begin
The ignore-errors macro will trap conditions of type error. There are, however, conditions that are not of type error.

Some conditions are not considered errors but are still very serious, so we call them serious conditions and we use the type serious-condition to represent them. Conditions such as those that might be signaled for ``stack overflow'' or ``storage exhausted'' are in this category.

The type error is a subtype of serious-condition, and it would technically be correct to use the term ``serious condition'' to refer to all serious conditions whether errors or not. However, normally we use the term ``serious condition'' to refer to things of type serious-condition but not of type error.

The point of the distinction between errors and other serious conditions is that some conditions are known to occur for reasons that are beyond the scope of Common Lisp to specify clearly. For example, we know that a stack will generally be used to implement function calling, and we know that stacks tend to be of finite size and are prone to overflow. Since the available stack size may vary from implementation to implementation, from session to session, or from function call to function call, it would be confusing to have expressions such as (ignore-errors (+ a b)) return a number sometimes and nil other times if a and b were always bound to numbers and the stack just happened to overflow on a particular call. For this reason, only conditions of type error and not all conditions of type serious-condition are trapped by ignore-errors. To trap other conditions, a lower-level facility must be used (such as handler-bind or handler-case).

By convention, the function error is preferred over signal to signal conditions of type serious-condition (including those of type error). It is the use of the function error, and not the type of the condition being signaled, that actually causes the debugger to be entered.


Compatibility note: The Common Lisp Condition System differs from that of Zetalisp in this respect. In Zetalisp the debugger is entered for an unhandled signal if the error function is used or if the condition is of type error.

change_end



next up previous contents index
Next: Non-Serious Conditions Up: Survey of Concepts Previous: Interactive Condition Handling


AI.Repository@cs.cmu.edu