module type S =sig
..end
函子 MoreLabels.Set.Make
的輸出簽名。
type
elt
集合元素的類型。
type
t
集合的類型。
val empty : t
空集合。
val add : elt -> t -> t
add x s
傳回一個包含 s
所有元素加上 x
的集合。如果 x
已經在 s
中,則傳回未變更的 s
(函數的結果在物理上會等於 s
)。
val singleton : elt -> t
singleton x
傳回一個只包含 x
的單元素集合。
val remove : elt -> t -> t
remove x s
傳回一個包含 s
所有元素,但不包含 x
的集合。如果 x
不在 s
中,則傳回未變更的 s
(函數的結果在物理上會等於 s
)。
val union : t -> t -> t
集合聯集。
val inter : t -> t -> t
集合交集。
val disjoint : t -> t -> bool
測試兩個集合是否不相交。
val diff : t -> t -> t
集合差集:diff s1 s2
包含 s1
中不在 s2
中的元素。
val cardinal : t -> int
傳回集合中的元素數量。
val elements : t -> elt list
傳回給定集合中所有元素的列表。傳回的列表根據 Ord.compare
的排序以遞增順序排序,其中 Ord
是給予 MoreLabels.Set.Make
的引數。
val min_elt : t -> elt
傳回給定集合中最小的元素(根據 Ord.compare
排序),如果集合為空,則引發 Not_found
。
val min_elt_opt : t -> elt option
傳回給定集合中最小的元素(根據 Ord.compare
排序),如果集合為空,則傳回 None
。
val max_elt : t -> elt
與 MoreLabels.Set.S.min_elt
相同,但傳回給定集合中最大的元素。
val max_elt_opt : t -> elt option
與 MoreLabels.Set.S.min_elt_opt
相同,但傳回給定集合中最大的元素。
val choose : t -> elt
傳回給定集合中的一個元素,如果集合為空,則引發 Not_found
。選擇哪個元素是不確定的,但對於相等的集合,將選擇相等的元素。
val choose_opt : t -> elt option
傳回給定集合中的一個元素,如果集合為空,則傳回 None
。選擇哪個元素是不確定的,但對於相等的集合,將選擇相等的元素。
val find : elt -> t -> elt
find x s
傳回 s
中等於 x
的元素(根據 Ord.compare
),如果沒有這樣的元素,則引發 Not_found
。
val find_opt : elt -> t -> elt option
find_opt x s
傳回 s
中等於 x
的元素(根據 Ord.compare
),如果沒有這樣的元素,則傳回 None
。
val find_first : f:(elt -> bool) ->
t -> elt
find_first ~f s
,其中 f
是一個單調遞增的函數,傳回 s
中最低的元素 e
,使得 f e
為真,如果沒有這樣的元素,則引發 Not_found
。
例如,find_first (fun e -> Ord.compare e x >= 0) s
將傳回 s
中第一個元素 e
,其中 Ord.compare e x >= 0
(直觀上:e >= x
),如果 x
大於 s
的任何元素,則引發 Not_found
。
val find_first_opt : f:(elt -> bool) ->
t -> elt option
find_first_opt ~f s
,其中 f
是一個單調遞增的函數,傳回一個包含 s
中最低元素 e
的選項,使得 f e
為真,如果沒有這樣的元素,則傳回 None
。
val find_last : f:(elt -> bool) ->
t -> elt
find_last ~f s
,其中 f
是一個單調遞減的函數,傳回 s
中最高的元素 e
,使得 f e
為真,如果沒有這樣的元素,則引發 Not_found
。
val find_last_opt : f:(elt -> bool) ->
t -> elt option
find_last_opt ~f s
,其中 f
是一個單調遞減的函數,傳回一個包含 s
中最高元素 e
的選項,使得 f e
為真,如果沒有這樣的元素,則傳回 None
。
val iter : f:(elt -> unit) -> t -> unit
iter ~f s
依序將 f
應用於 s
的所有元素。s
的元素按照元素類型的排序以遞增順序呈現給 f
。
val fold : f:(elt -> 'acc -> 'acc) ->
t -> init:'acc -> 'acc
fold ~f s init
計算 (f xN ... (f x2 (f x1 init))...)
,其中 x1 ... xN
是 s
的元素,以遞增順序排列。
val map : f:(elt -> elt) ->
t -> t
map ~f s
是一個集合,其元素為 f a0
、f a1
... f
,其中
aNa0
、a1
... aN
是 s
的元素。
元素以元素類型的排序以遞增順序傳遞給 f
。
如果 s
的任何元素都沒有被 f
變更,則傳回未變更的 s
。(如果 f
的每個輸出在物理上等於其輸入,則傳回的集合在物理上等於 s
。)
val filter : f:(elt -> bool) -> t -> t
filter ~f s
傳回 s
中滿足謂詞 f
的所有元素的集合。如果 f
滿足 s
中的每個元素,則傳回未變更的 s
(函數的結果在物理上會等於 s
)。
val filter_map : f:(elt -> elt option) ->
t -> t
filter_map ~f s
傳回所有 v
的集合,使得對於 s
的某些元素 x
,f x = Some v
。
例如,
filter_map (fun n -> if n mod 2 = 0 then Some (n / 2) else None) s
是 s
中偶數元素的一半的集合。
如果 s
的任何元素都沒有被 f
變更或刪除(如果對於每個元素 x
,f x = Some x
),則傳回未變更的 s
:函數的結果在物理上會等於 s
。
val partition : f:(elt -> bool) ->
t -> t * t
partition ~f s
傳回一對集合 (s1, s2)
,其中 s1
是 s
中滿足謂詞 f
的所有元素的集合,而 s2
是 s
中不滿足 f
的所有元素的集合。
val split : elt ->
t -> t * bool * t
split x s
傳回一個三元組 (l, present, r)
,其中 l
是 s
中嚴格小於 x
的元素的集合;r
是 s
中嚴格大於 x
的元素的集合;如果 s
不包含等於 x
的元素,則 present
為 false
,如果 s
包含等於 x
的元素,則 present
為 true
。
val is_empty : t -> bool
測試集合是否為空。
val mem : elt -> t -> bool
mem x s
測試 x
是否屬於集合 s
。
val equal : t -> t -> bool
equal s1 s2
測試集合 s1
和 s2
是否相等,也就是說,是否包含相等的元素。
val compare : t -> t -> int
集合之間的總排序。可以用作對集合的集合進行排序的函數。
val subset : t -> t -> bool
subset s1 s2
測試集合 s1
是否為集合 s2
的子集。
val for_all : f:(elt -> bool) -> t -> bool
for_all ~f s
檢查集合的所有元素是否滿足謂詞 f
。
val exists : f:(elt -> bool) -> t -> bool
exists ~f s
檢查集合中是否至少有一個元素滿足謂詞 f
。
val to_list : t -> elt list
to_list s
是 MoreLabels.Set.S.elements
s
。
val of_list : elt list -> t
of_list l
從元素列表建立集合。這通常比在列表上折疊 add
更有效率,但具有許多重複元素的列表除外。
val to_seq_from : elt ->
t -> elt Seq.t
to_seq_from x s
從 x
或以上開始,依遞增順序疊代 s
的元素的子集。
val to_seq : t -> elt Seq.t
依遞增順序疊代整個集合
val to_rev_seq : t -> elt Seq.t
依遞減順序疊代整個集合
val add_seq : elt Seq.t -> t -> t
依序將給定的元素加入集合。
val of_seq : elt Seq.t -> t
從給定的綁定建立集合