There appear to be three kinds of errors that can occur in NEOCLASSIC: syntax errors in NEOCLASSIC input, such as mismatched parentheses; evaluator errors, such as providing the wrong kind of argument to a function; and knowledge errors, such as creating an inconsistent individual. However, the first two kinds of errors are really errors in the interface to NEOCLASSIC and not really NEOCLASSIC errors at all. These errors are discussed along with the interface.
Real NEOCLASSIC errors result from syntactically valid calls to NEOCLASSIC functions that attempt to perform illegal knowledge operations. There are three main kinds of illegal operations in NEOCLASSIC: incorrect uses of names, attempts to create incoherent concepts, and attempts to make a knowledge base inconsistent.
Incorrect uses of names include attempts to look up objects by name, when no object of that type with that name exists; and attempts to create a second object of a given type with a given name. For example, if a concept with the name Person already exists in a knowledge base, a call of the form
Attempts to create incoherent concepts do create a concept, but the concept is not actually added to the knowledge base. An incoherent concept is created and returned, but this concept is not part of any knowledge base. An example of this kind of knowledge error is
(createConcept Person (and (atLeast 3 r) (atMost 2 r)))
(cl-create-ind Mary (and (atMost 0 son) (fills son Jack)))
Incoherent concepts and inconsistent individuals have associated with them the inference that caused the concept to become incoherent or the individual to become inconsistent. Inconsistent rules have associated with them an inconsistent individual that caused the rule to become inconsistent. The inference can be examined and printed in the same manner that any other inference resulting from explanation can be examined and printed.