11.3.40 compare/3   ISO

Synopsis

compare(-Order, +Term1, +Term2)

succeeds if the result of comparing terms Term1 and Term2 is Order

Arguments

Order

order

=

if Term1 is identical to Term2,

<

if Term1 is before Term2 in the standard order,

>

if Term1 is after Term2 in the standard order.

Term1

term

Term2

term

Description

The standard order is described in ref-lte-cte. Note that the standard order is not, in general, well defined for cyclic terms.

The goal (A) is equivalent to (B):

| ?- compare(=, Term1, Term2).  (A)
|?- (Term1 == Term2).  (B)

The following query succeeds, binding R to <, because 1 comes before 2 in the standard order.

 | ?- compare(R, 1, 2).

R = <

If Order is supplied, and is not one of <, >, or =, then an error is thrown, as follows.

Exceptions

type_error(atom, Order)

if Order is neither a variable nor an atom.

domain_error(order, Order)

if Order is an atom but not <, =, or >.

These errors were added in SICStus Prolog 4.3 for alignment with the ISO Prolog standard. Previous versions of SICStus Prolog simply failed instead of reporting an error.

See Also

@</2, @=</2, @>/2, @>=/2, SP_compare(), ref-lte-cte.


Send feedback on this subject.