ocaml中集合的定义

时间:2010-11-18 09:54:33

标签: set ocaml

我在创建包含异构元素的集合时遇到问题,特别是元素的结构如下:

(a,1),((a,1),1)),((a,1),1),1)等......

我可以使用模块Set of ocaml吗?

此外还有一些功能允许我在集合之间制作笛卡尔积(也是异构的)?

2 个答案:

答案 0 :(得分:8)

您无法构建异构元素集。当然,如果您事先了解类型,则可以定义类型以统一类型。它看起来像你做的,它可能是由:

定义的递归类型
type ('a,'b) r = | L of 'a 
                 | N of (('a,'b) r * 'b)

因此,您的示例将构建为,

N (L a,1)
N ( N (L a,1),1)
N ( N ( N (L a,1),1),1)

然后你只需构建Ordered模块来包含比较函数。

在创建笛卡尔积的情况下,此时不会处理异构元素,而是先前类型的元组。这将需要一个新的Ordered模块来处理这些比较。

答案 1 :(得分:0)

不,从http://caml.inria.fr/pub/docs/manual-ocaml/libref/Set.S.html您可以看到模块Set中的集合是同质的。

您可以使用http://alan.petitepomme.net/cwn/2010.02.09.html中描述的方法代替字典。