OCaml library : Set.Make (original) (raw)
Functor Set.Make
module Make:
functor (
Ord
:
[OrderedType](Set.OrderedType.html)
) ->
[S](Set.S.html)
with type elt = Ord.t
Functor building an implementation of the set structure given a totally ordered type.
Sets
type ``elt
The type of the set elements.
type ``t
val empty : [t](Set.S.html#TYPEt)
val add : [elt](Set.S.html#TYPEelt) -> [t](Set.S.html#TYPEt) -> [t](Set.S.html#TYPEt)
add x s
returns a set containing all elements of s
, plus x
. If x
was already in s
, s
is returned unchanged (the result of the function is then physically equal to s
).
- Before 4.03 Physical equality was not ensured.
val singleton : [elt](Set.S.html#TYPEelt) -> [t](Set.S.html#TYPEt)
singleton x
returns the one-element set containing only x
.
val remove : [elt](Set.S.html#TYPEelt) -> [t](Set.S.html#TYPEt) -> [t](Set.S.html#TYPEt)
remove x s
returns a set containing all elements of s
, except x
. If x
was not in s
, s
is returned unchanged (the result of the function is then physically equal to s
).
- Before 4.03 Physical equality was not ensured.
val union : [t](Set.S.html#TYPEt) -> [t](Set.S.html#TYPEt) -> [t](Set.S.html#TYPEt)
val inter : [t](Set.S.html#TYPEt) -> [t](Set.S.html#TYPEt) -> [t](Set.S.html#TYPEt)
val disjoint : [t](Set.S.html#TYPEt) -> [t](Set.S.html#TYPEt) -> bool
Test if two sets are disjoint.
- Since 4.08
val diff : [t](Set.S.html#TYPEt) -> [t](Set.S.html#TYPEt) -> [t](Set.S.html#TYPEt)
Set difference: diff s1 s2
contains the elements of s1
that are not in s2
.
val cardinal : [t](Set.S.html#TYPEt) -> int
Return the number of elements of a set.
Elements
val elements : [t](Set.S.html#TYPEt) -> [elt](Set.S.html#TYPEelt) list
Return the list of all elements of the given set. The returned list is sorted in increasing order with respect to the ordering Ord.compare
, where Ord
is the argument given to Set.Make.
val min_elt : [t](Set.S.html#TYPEt) -> [elt](Set.S.html#TYPEelt)
Return the smallest element of the given set (with respect to the Ord.compare
ordering), or raiseNot_found
if the set is empty.
val min_elt_opt : [t](Set.S.html#TYPEt) -> [elt](Set.S.html#TYPEelt) option
Return the smallest element of the given set (with respect to the Ord.compare
ordering), or None
if the set is empty.
- Since 4.05
val max_elt : [t](Set.S.html#TYPEt) -> [elt](Set.S.html#TYPEelt)
Same as Set.S.min_elt, but returns the largest element of the given set.
val max_elt_opt : [t](Set.S.html#TYPEt) -> [elt](Set.S.html#TYPEelt) option
Same as Set.S.min_elt_opt, but returns the largest element of the given set.
- Since 4.05
val choose : [t](Set.S.html#TYPEt) -> [elt](Set.S.html#TYPEelt)
Return one element of the given set, or raise Not_found
if the set is empty. Which element is chosen is unspecified, but equal elements will be chosen for equal sets.
val choose_opt : [t](Set.S.html#TYPEt) -> [elt](Set.S.html#TYPEelt) option
Return one element of the given set, or None
if the set is empty. Which element is chosen is unspecified, but equal elements will be chosen for equal sets.
- Since 4.05
Searching
val find : [elt](Set.S.html#TYPEelt) -> [t](Set.S.html#TYPEt) -> [elt](Set.S.html#TYPEelt)
find x s
returns the element of s
equal to x
(according to Ord.compare
), or raise Not_found
if no such element exists.
- Since 4.01
val find_opt : [elt](Set.S.html#TYPEelt) -> [t](Set.S.html#TYPEt) -> [elt](Set.S.html#TYPEelt) option
find_opt x s
returns the element of s
equal to x
(according to Ord.compare
), or None
if no such element exists.
- Since 4.05
val find_first : ([elt](Set.S.html#TYPEelt) -> bool) -> [t](Set.S.html#TYPEt) -> [elt](Set.S.html#TYPEelt)
find_first f s
, where f
is a monotonically increasing function, returns the lowest element e
of s
such that f e
, or raises Not_found
if no such element exists.
For example, find_first (fun e -> Ord.compare e x >= 0) s
will return the first element e
of s
where Ord.compare e x >= 0
(intuitively: e >= x
), or raise Not_found
if x
is greater than any element of s
.
- Since 4.05
val find_first_opt : ([elt](Set.S.html#TYPEelt) -> bool) -> [t](Set.S.html#TYPEt) -> [elt](Set.S.html#TYPEelt) option
find_first_opt f s
, where f
is a monotonically increasing function, returns an option containing the lowest element e
of s
such that f e
, or None
if no such element exists.
- Since 4.05
val find_last : ([elt](Set.S.html#TYPEelt) -> bool) -> [t](Set.S.html#TYPEt) -> [elt](Set.S.html#TYPEelt)
find_last f s
, where f
is a monotonically decreasing function, returns the highest element e
of s
such that f e
, or raises Not_found
if no such element exists.
- Since 4.05
val find_last_opt : ([elt](Set.S.html#TYPEelt) -> bool) -> [t](Set.S.html#TYPEt) -> [elt](Set.S.html#TYPEelt) option
find_last_opt f s
, where f
is a monotonically decreasing function, returns an option containing the highest element e
of s
such that f e
, or None
if no such element exists.
- Since 4.05
Traversing
val iter : ([elt](Set.S.html#TYPEelt) -> unit) -> [t](Set.S.html#TYPEt) -> unit
iter f s
applies f
in turn to all elements of s
. The elements of s
are presented to f
in increasing order with respect to the ordering over the type of the elements.
val fold : ([elt](Set.S.html#TYPEelt) -> 'acc -> 'acc) -> [t](Set.S.html#TYPEt) -> 'acc -> 'acc
fold f s init
computes (f xN ... (f x2 (f x1 init))...)
, where x1 ... xN
are the elements of s
, in increasing order.
Transforming
val map : ([elt](Set.S.html#TYPEelt) -> [elt](Set.S.html#TYPEelt)) -> [t](Set.S.html#TYPEt) -> [t](Set.S.html#TYPEt)
map f s
is the set whose elements are f a0
,f a1
... f aN
, where a0
,a1
...aN
are the elements of s
.
The elements are passed to f
in increasing order with respect to the ordering over the type of the elements.
If no element of s
is changed by f
, s
is returned unchanged. (If each output of f
is physically equal to its input, the returned set is physically equal to s
.)
- Since 4.04
val filter : ([elt](Set.S.html#TYPEelt) -> bool) -> [t](Set.S.html#TYPEt) -> [t](Set.S.html#TYPEt)
filter f s
returns the set of all elements in s
that satisfy predicate f
. If f
satisfies every element in s
,s
is returned unchanged (the result of the function is then physically equal to s
).
- Before 4.03 Physical equality was not ensured.
val filter_map : ([elt](Set.S.html#TYPEelt) -> [elt](Set.S.html#TYPEelt) option) -> [t](Set.S.html#TYPEt) -> [t](Set.S.html#TYPEt)
filter_map f s
returns the set of all v
such thatf x = Some v
for some element x
of s
.
For example,
filter_map (fun n -> if n mod 2 = 0 then Some (n / 2) else None) s
is the set of halves of the even elements of s
.
If no element of s
is changed or dropped by f
(iff x = Some x
for each element x
), thens
is returned unchanged: the result of the function is then physically equal to s
.
- Since 4.11
val partition : ([elt](Set.S.html#TYPEelt) -> bool) -> [t](Set.S.html#TYPEt) -> [t](Set.S.html#TYPEt) * [t](Set.S.html#TYPEt)
partition f s
returns a pair of sets (s1, s2)
, wheres1
is the set of all the elements of s
that satisfy the predicate f
, and s2
is the set of all the elements ofs
that do not satisfy f
.
val split : [elt](Set.S.html#TYPEelt) -> [t](Set.S.html#TYPEt) -> [t](Set.S.html#TYPEt) * bool * [t](Set.S.html#TYPEt)
split x s
returns a triple (l, present, r)
, wherel
is the set of elements of s
that are strictly less than x
;r
is the set of elements of s
that are strictly greater than x
;present
is false
if s
contains no element equal to x
, or true
if s
contains an element equal to x
.
Predicates and comparisons
val is_empty : [t](Set.S.html#TYPEt) -> bool
Test whether a set is empty or not.
val mem : [elt](Set.S.html#TYPEelt) -> [t](Set.S.html#TYPEt) -> bool
mem x s
tests whether x
belongs to the set s
.
val equal : [t](Set.S.html#TYPEt) -> [t](Set.S.html#TYPEt) -> bool
equal s1 s2
tests whether the sets s1
and s2
are equal, that is, contain equal elements.
val compare : [t](Set.S.html#TYPEt) -> [t](Set.S.html#TYPEt) -> int
Total ordering between sets. Can be used as the ordering function for doing sets of sets.
val subset : [t](Set.S.html#TYPEt) -> [t](Set.S.html#TYPEt) -> bool
subset s1 s2
tests whether the set s1
is a subset of the set s2
.
val for_all : ([elt](Set.S.html#TYPEelt) -> bool) -> [t](Set.S.html#TYPEt) -> bool
for_all f s
checks if all elements of the set satisfy the predicate f
.
val exists : ([elt](Set.S.html#TYPEelt) -> bool) -> [t](Set.S.html#TYPEt) -> bool
exists f s
checks if at least one element of the set satisfies the predicate f
.
Converting
val to_list : [t](Set.S.html#TYPEt) -> [elt](Set.S.html#TYPEelt) list
- Since 5.1
val of_list : [elt](Set.S.html#TYPEelt) list -> [t](Set.S.html#TYPEt)
of_list l
creates a set from a list of elements. This is usually more efficient than folding add
over the list, except perhaps for lists with many duplicated elements.
- Since 4.02
val to_seq_from : [elt](Set.S.html#TYPEelt) -> [t](Set.S.html#TYPEt) -> [elt](Set.S.html#TYPEelt) [Seq.t](Seq.html#TYPEt)
to_seq_from x s
iterates on a subset of the elements of s
in ascending order, from x
or above.
- Since 4.07
val to_seq : [t](Set.S.html#TYPEt) -> [elt](Set.S.html#TYPEelt) [Seq.t](Seq.html#TYPEt)
Iterate on the whole set, in ascending order
- Since 4.07
val to_rev_seq : [t](Set.S.html#TYPEt) -> [elt](Set.S.html#TYPEelt) [Seq.t](Seq.html#TYPEt)
Iterate on the whole set, in descending order
- Since 4.12
val add_seq : [elt](Set.S.html#TYPEelt) [Seq.t](Seq.html#TYPEt) -> [t](Set.S.html#TYPEt) -> [t](Set.S.html#TYPEt)
Add the given elements to the set, in order.
- Since 4.07
val of_seq : [elt](Set.S.html#TYPEelt) [Seq.t](Seq.html#TYPEt) -> [t](Set.S.html#TYPEt)
Build a set from the given bindings
- Since 4.07