首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >OCaml变体类型:混淆编译器

OCaml变体类型:混淆编译器
EN

Stack Overflow用户
提问于 2014-06-11 20:04:10
回答 1查看 73关注 0票数 1

我正在尝试理解OCaml中的变体(虽然这不是作业,但作业是从我朋友以前的作业中提取的,所以请不要给出正确的代码)。

我有下面的代码,表示一个家族树。其思想是,每个家族树要么是未知的,要么是一个人;这个人包含一个指向其他family_trees的链接。

代码语言:javascript
运行
复制
type family_tree = Unknown | Person of person 
  and person = {name: string; year_of_birth: int; 
                mother: family_tree; father: family_tree}

然而,当我试图实际使用代码来表示一个家庭时,我会得到错误。

代码语言:javascript
运行
复制
Error: This expression has type person but an expression was expected 
of type family_tree

生成错误的代码示例:

代码语言:javascript
运行
复制
let ron: family_tree = {name = "Ron Smith"; year_of_birth = "1953";
                        mother = Unknown; father = Unknown}
let jim: family_tree = {name = "Jim Smith"; year_of_birth = "1983";
                        mother = Unknown; father = ron}

我怎样才能防止OCaml认为罗恩是person而不是family_tree

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-06-11 20:08:22

因为{name = "Ron Smith"}是一个person,但是您需要一个定义为Person personfamily_tree,并且需要与它一起指定变体名称:

代码语言:javascript
运行
复制
let ron: family_tree = Person {name = "Ron Smith"; ... }

否则,您将无法将family_tree区分为Personperson

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

https://stackoverflow.com/questions/24171618

复制
相关文章

相似问题

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