module 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
是給定 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
與 Set.S.min_elt
相同,但傳回給定集合的最大元素。
val max_elt_opt : t -> elt option
與 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 : (elt -> bool) -> t -> elt
find_first f s
,其中 f
是單調遞增的函式,傳回 s
中使得 f e
的最小元素 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 : (elt -> bool) -> t -> elt option
find_first_opt f s
,其中 f
是單調遞增的函式,傳回一個選項,其中包含 s
中使得 f e
的最小元素 e
,如果不存在這樣的元素則會傳回 None
。
val find_last : (elt -> bool) -> t -> elt
find_last f s
,其中 f
是單調遞減的函式,傳回 s
中使得 f e
的最大元素 e
,如果不存在這樣的元素則會引發 Not_found
。
val find_last_opt : (elt -> bool) -> t -> elt option
find_last_opt f s
,其中 f
是單調遞減的函式,傳回一個選項,其中包含 s
中使得 f e
的最大元素 e
,如果不存在這樣的元素則會傳回 None
。
val iter : (elt -> unit) -> t -> unit
iter f s
依序將 f
應用於 s
的所有元素。s
的元素會根據元素類型的排序以遞增順序呈現給 f
。
val fold : (elt -> 'acc -> 'acc) -> t -> 'acc -> 'acc
fold f s init
計算 (f xN ... (f x2 (f x1 init))...)
,其中 x1 ... xN
是 s
的元素,依遞增順序。
val map : (elt -> elt) -> t -> t
map f s
是元素為 f a0
、f a1
... f aN
的集合,其中 a0
、a1
... aN
是 s
的元素。
元素會根據元素類型的排序以遞增順序傳遞給 f
。
如果 s
中沒有任何元素被 f
變更,則 s
會保持不變。(如果 f
的每個輸出在物理上都等於其輸入,則傳回的集合在物理上與 s
相等。)
val filter : (elt -> bool) -> t -> t
filter f s
傳回 s
中滿足述詞 f
的所有元素的集合。如果 f
滿足 s
中的每個元素,則 s
會保持不變 (函式的結果在物理上與 s
相等)。
val filter_map : (elt -> elt option) -> t -> t
filter_map f s
傳回所有 v
的集合,其中 f x = Some v
對於 s
的某些元素 x
成立。
例如,
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 : (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 : (elt -> bool) -> t -> bool
for_all f s
檢查集合的所有元素是否都滿足述詞 f
。
val exists : (elt -> bool) -> t -> bool
exists f s
檢查集合中是否至少有一個元素滿足述詞 f
。
val to_list : t -> elt list
to_list s
是 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
從給定的綁定建立集合。