Node:Checker Output, Next:Example, Previous:Declaring Nondeterminacy, Up:The Determinacy Checker
The output of the determinacy checker is quite simple. For each
clause containing unexpected nondeterminacy, a single line is printed
showing the module, name, arity, and clause number (counting from 1).
The form of the information is:
* Non-determinate: module:name/arity (clause number)
A second line for each nondeterminate clause indicates the cause of the nondeterminacy. The recognized causes are:
fail/0
or raise_exception/1
.
fail/0
or raise_exception/1
. In this case, the
clause number of the other clause is mentioned.
The determinacy checker also occasionally prints warnings when
declarations are made too late in the file or not at all. For example,
if you include a dynamic
, nondet
, or discontiguous
declaration for a predicate after some clauses for that predicate, or if
you put a dynamic
or nondet
declaration for a predicate
after a clause that includes a call to that predicate, the determinacy
checker may have missed some nondeterminacy in your program. The
checker also detects undeclared discontiguous predicates, which may also
have undetected nondeterminacy. Finally, the checker looks for goals in
your program that indicate that predicates are dynamic; if no
dynamic
declaration for those predicates exists, you will be
warned.
These warnings take the following form:
! warning: predicate module:name/arity is property. ! Some nondeterminacy may have been missed. ! Add (or move) the directive ! :- property module:name/arity. ! near the top of this file.