9.7.3 Checker Output

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:

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, then 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, then 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.

Send feedback on this subject.