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.