模块 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

给定一个全序类型,构建集合结构实现的函子。