Module ordsets

This module provides ordered sets. The ordered sets are represented by lists [x1, .., xn]. The lists must be ordered and duplicate free. If this precondition is violated the behaviour of the predicates is undefined.

Examples:
?- ord_union([2,3,4],[1,2,4,5],X).
X = [1,2,3,4,5]
?- ord_union([1,2,4,5],[2,3,4],X).
X = [1,2,3,4,5]

The realization uses a membership check based on (==)/2 and lexical ordering based on (@<)/2. As a result the predicates are safe to be used with non-ground terms. On the other hand, since this comparison is not arithmetical, 1 and 1.0 are for example considered different.

An unordered set can be converted into an ordered set by using the ISO predicate sort/2. Also there is no need for predicate permutation/2 here, since equality of ordered sets can be tested via the ISO predicate ==/2, provided the elements are sufficiently normalized.

The following ordered sets predicates are provided:

ord_contains(E, O):
The predicate succeeds when the set O contains the element E.
ord_difference(O1, O2, O3):
The predicate succeeds when O3 unifies with the difference of O1 by O2.
ord_intersection(O1, O2, O3):
The predicate succeeds when O3 unifies with the intersection of O1 and O2.
ord_union(O1, O2, O3):
The predicate succeeds when O3 unifies with the union of O1 and O2.
ord_subset(O1, O2):
The predicate succeeds when O1 is a subset of O2.

Comments