A.15 library( ordsets ): Ordered Set Manipulation

Ordered sets are lists with unique elements sorted to the standard order of terms (see sort/2). Exploiting ordering, many of the set operations can be expressed in order N rather than N^2 when dealing with unordered sets that may contain duplicates. The library(ordsets) is available in a number of Prolog implementations. Our predicates are designed to be compatible with common practice in the Prolog community. The implementation is incomplete and relies partly on library(oset), an older ordered set library distributed with SWI-Prolog. New applications are advices to use library(ordsets).

Some of these predicates match directly to corresponding list operations. It is adviced to use the versions from this library to make clear you are operating on ordered sets.

ord_empty(?Set)
True if Set is an empty ordered set. Set unifies with the empty list.
list_to_ord_set(+List, -OrdSet)
Convert a List to an ordered set. Same as sort/2.
ord_add_element(+Set, +Element, -NewSet)
Add an element to an ordered set. NewSet is the same as Set if Element is already part of Set.
ord_del_element(+Set, +Element, -NewSet)
Delete Element from Set. Succeeds without changing Set if Set does not contain Element.
ord_intersect(+Set1, +Set2)
True if the intersection of Set1 and Set2 is non-empty.
ord_intersection(+Set1, +Set2, -Intersection)
True if Intersection is the intersection of Set1 and Set2.
ord_disjoint(+Set1, +Set2)
True if Set1 and Set2 have no common element. Negation of ord_intersect/2.
ord_subtract(+Set, +Delete, -Remaining)
True if Remaining contains the elements of Set that are not in set Delete.
ord_union(+Set1, +Set2, -Union)
True if Union contains all elements from Set1 and Set2
ord_union(+Set1, +Set2, -Union, -New)
Defined as if ord_union(Set1, Set2, Union), ord_subtract(Set2, Set1, New).
ord_subset(+Sub, +Super)
True if all elements of Sub are in Super.
ord_memberchk(+Element, +Set)
True if Element appears in Set. Does not backtrack. Same as memberchk/2.