首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OCaml中循环类型的定义

OCaml中循环类型的定义
EN

Stack Overflow用户
提问于 2014-02-28 11:26:34
回答 1查看 1K关注 0票数 2

显然,下面的类型定义是cyclic

代码语言:javascript
复制
type node = int * node;;
Error: The type abbreviation node is cyclic 

我的问题是怎么来的,下面的一个是not cyclic

代码语言:javascript
复制
type tree = Node of int * tree;;

第二个定义也涉及其本身。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-02-28 15:51:48

可以这样看,node是一种类型的缩写,而不是新类型本身的缩写。所以编译器(或任何感兴趣的人)必须查看内部,看看它是什么缩写。一旦您查看了内部,您就会注意到一些使您难以分析的事情(例如,它是一种递归类型,因此可能需要许多展开)。

另一方面,tree是一种以构造函数为特征的新型类型。(在本例中,只有一个构造函数Node)。因此编译器(或其他感兴趣的方面)根本不需要查看内部来确定类型是什么。一旦您看到Node,类型就确定了。即使你看了里面,你也只需要往下看一层。这允许递归,而不会造成分析上的任何困难。

实际上,第一类递归类型通常是无意的,它们会导致奇怪的类型。第二类几乎不可能错误地创建,因为在整个过程中都有小路标(构造器);实际上,它们有点像类型系统的命脉。

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

https://stackoverflow.com/questions/22093873

复制
相关文章

相似问题

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