next up previous contents index
Next: Control Predicates Up: Comparison and Unification or Previous: Comparison and Unification or   Contents   Index


Standard Order of Terms

Comparison and unification of arbitrary terms. Terms are ordered in the so called ``standard order''. This order is defined as follows:

  1. $\arg{Variables} < \arg{Atoms} < \arg{Strings}
< \arg{Numbers} < \arg{Terms}$2.3
  2. $\arg{Old~Variable} < \arg{New~Variable}$2.4
  3. Atoms are compared alphabetically.
  4. Strings are compared alphabetically.
  5. Numbers are compared by value. Integers and floats are treated identically.
  6. Compound terms are first checked on their arity, then on their functor-name (alphabetically) and finally recursively on their arguments, leftmost argument first.

If the prolog_flag (see current_prolog_flag2) iso is defined, all floating point numbers precede all integers.

+Term1+Term2 Succeeds if Term1 is equivalent to Term2. A variable is only identical to a sharing variable. +Term1+Term2 Equivalent to Term1 == Term2. +Term1+Term2 Unify Term1 with Term2. Succeeds if the unification succeeds. unify_with_occurs_check2+Term1, +Term2 As 2, but using sound-unification. That is, a variable only unifies to a term if this term does not contain the variable itself. To illustrate this, consider the two goals below:


\begin{code}
1 ?- A = f(A).
\par A = f(f(f(f(f(f(f(f(f(f(...))))))))))
2 ?- unify_with_occurs_check(A, f(A)).
\par No
\end{code}

I.e. the first creates a cyclic-term, which is printed as an infinitly nested f1 term (see the max_depth option of write_term2). The second executes logically sound unification and thus fails. +Term1+Term2 Equivalent to Term1 = Term2. +Term1+Term2 Succeeds if Term1 is `structurally equal' to Term2. Structural equivalence is weaker than equivalence (2), but stronger than unification (2). Two terms are structurally equal if their tree representation is identical and they have the same `pattern' of variables. Examples:

a =@= A false
A =@= B true
x(A,A) =@= x(B,C) false
x(A,A) =@= x(B,B) true
x(A,B) =@= x(C,D) true
+Term1+Term2 Equivalent to `Term1 =@= Term2'. +Term1+Term2 Succeeds if Term1 is before Term2 in the standard order of terms. +Term1+Term2 Succeeds if both terms are equal (2) or Term1 is before Term2 in the standard order of terms. +Term1+Term2 Succeeds if Term1 is after Term2 in the standard order of terms. +Term1+Term2 Succeeds if both terms are equal (2) or Term1 is after Term2 in the standard order of terms. compare3?Order, +Term1, +Term2 Determine or test the Order between two terms in the standard order of terms. Order is one of , or , with the obvious meaning.


next up previous contents index
Next: Control Predicates Up: Comparison and Unification or Previous: Comparison and Unification or   Contents   Index
Dr. Richard Botting 2001-12-12