Types OCaml变量类型:混淆编译器

Types OCaml变量类型:混淆编译器,types,ocaml,Types,Ocaml,我试图理解OCaml中的变体(虽然这不是家庭作业,但作业取自我朋友的旧作业,因此请不要给出正确的代码) 我有以下代码,表示一个族谱。这个想法是,每个家谱要么是未知的,要么是一个人;此人包含指向其他家谱树的链接 type family_tree = Unknown | Person of person and person = {name: string; year_of_birth: int; mother: family_tree; father: fa

我试图理解OCaml中的变体(虽然这不是家庭作业,但作业取自我朋友的旧作业,因此请不要给出正确的代码)

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

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认为ron是一个
人,而不是一个
家族树

因为
{name=“Ron Smith”}
是一个
,但是您需要一个定义为
家族树
,并且您需要指定变体名称和它:

let ron: family_tree = Person {name = "Ron Smith"; ... }

否则,您将无法将
家族树
区分为

谢谢,这是有道理的。但是,您需要编写let-ron:family_tree=Person{name=“ron Smith”…}以在OCaml中编译代码。抱歉,这是一个拼写错误,已修复。