我正在尝试理解OCaml中的变体(虽然这不是作业,但作业是从我朋友以前的作业中提取的,所以请不要给出正确的代码)。
我有下面的代码,表示一个家族树。其思想是,每个家族树要么是未知的,要么是一个人;这个人包含一个指向其他family_trees的链接。
type family_tree = Unknown | Person of person
and person = {name: string; year_of_birth: int;
mother: family_tree; father: family_tree}然而,当我试图实际使用代码来表示一个家庭时,我会得到错误。
Error: This expression has type person but an expression was expected
of type family_tree生成错误的代码示例:
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
发布于 2014-06-11 20:08:22
因为{name = "Ron Smith"}是一个person,但是您需要一个定义为Person person的family_tree,并且需要与它一起指定变体名称:
let ron: family_tree = Person {name = "Ron Smith"; ... }否则,您将无法将family_tree区分为Person和person。
https://stackoverflow.com/questions/24171618
复制相似问题