set - OCaml 中的异构集

标签 set ocaml

假设我有一个类型定义为

type value =
      None
    | Int of int
    | Float of float
    | Complex of Complex.t
    | String of string
    | Char of char
    | Bool of bool

我希望能够使用 Sets这些值。据我了解,我必须使用仿函数来具体化 Set具有具体类型及其关联顺序的模块。

在这个例子中我应该怎么做?自 value不能直接在Set.Make里面使用仿函数?

当然,我需要能够对这些值进行完整排序,所以我应该发明一些东西,比如为不同类型提供预定义顺序,然后按它们的有效值对它们进行排序。我说得对吗?

例如,我可以决定 Int of int < Float of intInt x < Int y如果x < y .这是实现我想要实现的目标的实用方法吗?

最佳答案

Set.Make仿函数采用签名为 Set.OrderedType 的模块:

module type OrderedType = sig type t val compare : t -> t -> int end

为了比较,您可以使用 Pervasives.compare如果您对min_elt/max_elt返回的顺序和结果没有任何要求。所以仿函数的参数可以像这样简单:

module T = struct type t = value let compare = compare end

关于set - OCaml 中的异构集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3213349/

相关文章:

ocaml - ocamldoc 可以引用类型构造函数吗?

postgresql - 声明变量 set = select

linux - 使用 set -u 进行 bash 调试

r - 如何检查集合A是否是R中集合B的子集?

OCaml:使用 Core Set 添加元素的惯用方法是什么?

ocaml - OCaml缺点(::)运算符?

types - 跨越 "module type ="的 OCaml 递归类型

ocaml - 尝试使用 Dynlink 动态加载模块

algorithm - 最大矩形集覆盖

delphi - 集合的内存布局