For those of you, who are not familiar with the Clocksin & Mellish PROLOG, we discuss differences of that to other popular PROLOG implementations.
Evaluation of numerical expressions is done by the 'is()' ' predicate. The ' =() ' predicate is only used for unification and does NOT perform any evaluation. For example:
A is 7+5 --> Result A matches 12
B = 7+5 --> Result B matches 7+5 or +(7,5)
5 is 25 mod 10 succeeds
25 = 5 * 5 fails
Conjunctions and disjunctions of goals are possible with the ',' and ';' operators.
These operators may be nested. To avoid confusion, it is advisable to use extra brackets.
The ' cut ' ) built-in predicate affects backtracking. If it is encountered, the system commits to all actions done since entering the parent predicate. Thus, if backtracking occurs and is trying to re-satisfy the '!', the parent predicate fails.