Built-in predicates generate exceptions using a term
error(Formal, Context). The first argument is the `formal'
description of the error, specifying the class and generic defined
context information. When applicable, the ISO error term definition is
used. The second part describes some additional context to help the
programmer while debugging. In its most generic form this is a term of
context(Name/Arity, Message), where
Name/Arity describes the built-in predicate that
raised the error, and Message provides an additional
description of the error. Any part of this structure may be a variable
if no information was present.