首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ocaml中集合的定义

ocaml中集合的定义
EN

Stack Overflow用户
提问于 2010-11-18 17:54:33
回答 2查看 524关注 0票数 6

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

(a,1),((a,1),1),((a,1),1),1),依此类推。

我可以使用ocaml的模块集来做这件事吗?

此外,是否还有一些函数可以让我在集合之间生成笛卡尔乘积(也是异构的)?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-11-18 23:38:40

您不能构建异构元素集。当然,如果事先知道这些类型,您可以定义一个类型来统一这些类型。看起来您是这样做的,它可能是由定义的递归类型:

代码语言:javascript
复制
type ('a,'b) r = | L of 'a 
                 | N of (('a,'b) r * 'b)

因此,您的示例将被构造为,

代码语言:javascript
复制
N (L a,1)
N ( N (L a,1),1)
N ( N ( N (L a,1),1),1)

然后,您只需构建有序模块来包含比较函数。

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

票数 8
EN

Stack Overflow用户

发布于 2010-11-18 17:57:18

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4213525

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档