This package defines operations on ordered sets. Ordered sets are sets
represented as lists with the elements ordered in a standard order.
The ordering is defined by the `@<`

family of term comparison
predicates and it is the ordering produced by the built-in predicate
`sort/2`

(see section Comparison of Terms).

To load the package, enter the query

| ?- use_module(library(ordsets)).

`is_ordset(`

`+Set`)-
`Set`is an ordered set. `list_to_ord_set(`

`+List`,`?Set`)-
`Set`is the ordered representation of the set denoted by the unordered representation`List`. Example:| ?- list_to_ord_set([p,r,o,l,o,g], P). P = [g,l,o,p,r] ? yes

`ord_add_element(`

`+Set1`,`+Element``?Set2`)-
`Set2`is`Set1`with`Element`inserted in it, preserving the order. Example:| ?- ord_add_element([a,c,d,e,f], b, N). N = [a,b,c,d,e,f] ? yes

`ord_del_element(`

`+Set1`,`+Element`,`?Set2`)-
`Set2`is like`Set1`but with`Element`removed. `ord_disjoint(`

`+Set1`,`+Set2`)- The two ordered sets have no elements in common.
`ord_intersect(`

`+Set1`,`+Set2`)- The two ordered sets have at least one element in common.
`ord_intersection(`

`+Set1`,`+Set2`,`?Intersect`)-
`Intersect`is the ordered set representation of the intersection between`Set1`and`Set2`. `ord_intersection(`

`+Set1`,`+Set2`,`?Intersect`,`?Diff`)-
`Intersect`is the intersection between`Set1`and`Set2`, and`Diff`is the difference between`Set2`and`Set1`. `ord_intersection(`

`+Sets`,`?Intersection`)-
`Intersection`is the ordered set representation of the intersection of all the sets in`Sets`. Example:| ?- ord_intersection([[1,2,3],[2,3,4],[3,4,5]], I). I = [3] ? yes

`ord_member(`

`+Elt`,`+Set`)-
is true when
`Elt`is a member of`Set`. `ord_seteq(`

`+Set1`,`+Set2`)- Is true when the two arguments represent the same set. Since they are assumed to be ordered representations, they must be identical.
`ord_setproduct(`

`+Set1`,`+Set2`,`?SetProduct`)-
`SetProduct`is the Cartesian Product of the two Sets. The product is represented as pairs: Elem1-Elem2 where Elem1 is an element from`Set1`and Elem2 is an element from`Set2`. Example| ?- ord_setproduct([1,2,3], [4,5,6], P). P = [1-4,1-5,1-6,2-4,2-5,2-6,3-4,3-5,3-6] ? yes

`ord_subset(`

`+Set1`,`+Set2`)-
Every element of the ordered set
`Set1`appears in the ordered set`Set2`. `ord_subtract(`

`+Set1`,`+Set2`,`?Difference`)-
`Difference`contains all and only the elements of`Set1`which are not also in`Set2`. Example:| ?- ord_subtract([1,2,3,4], [3,4,5,6], S). S = [1,2] ? yes

`ord_symdiff(`

`+Set1`,`+Set2`,`?Difference`)-
`Difference`is the symmetric difference of`Set1`and`Set2`. Example:| ?- ord_symdiff([1,2,3,4], [3,4,5,6], D). D = [1,2,5,6] ? yes

`ord_union(`

`+Set1`,`+Set2`,`?Union`)-
`Union`is the union of`Set1`and`Set2`. `ord_union(`

`+Set1`,`+Set2`,`?Union`,`?New`)-
`Union`is the union of`Set1`and`Set2`, and`New`is the difference between`Set2`and`Set1`. This is useful if you are accumulating members of a set and you want to process new elements as they are added to the set. `ord_union(`

`+Sets`,`?Union`)-
`Union`is the union of all the sets in`Sets`. Example:| ?- ord_union([[1,2,3],[2,3,4],[3,4,5]], U). U = [1,2,3,4,5] ? yes

Go to the first, previous, next, last section, table of contents.