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.