Модуль Set
module Set: sig .. end
Множества на упорядоченных типах.
Этот модуль реализует структуру данных «множество» при наличии функции полного порядка над элементами множества. Все операции над множествами являются чисто аппликативными (не имеют побочных эффектов). В реализации используются сбалансированные бинарные деревья, поэтому она достаточно эффективна: например, вставка элемента и проверка его принадлежности множеству занимают время, логарифмическое от размера множества.
Функтор Set.Make создаёт реализации для любого типа при наличии функции compare. Например:
module IntPairs =
struct
type t = int * int
let compare (x0,y0) (x1,y1) =
match Stdlib.compare x0 x1 with
0 -> Stdlib.compare y0 y1
| c -> c
end
module PairsSet = Set.Make(IntPairs)
let m = PairsSet.(empty |> add (2,3) |> add (5,7) |> add (11,13))
В результате создаётся новый модуль PairsSet с новым типом PairsSet.t для множеств из элементов типа int * int.
module type OrderedType = sig .. end
Входная сигнатура функтора Set.Make.
module type S = sig .. end
Выходная сигнатура функтора Set.Make.
module Make: functor (Ord : OrderedType) -> S with type elt = Ord.t
Функтор, создающий реализацию структуры «множество» для типа с полным порядком.
© 1995-2026 INRIA.
https://ocaml.org/manual/5.5/api/Set.html