Types OCaml变量类型:混淆编译器
我试图理解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
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中编译代码。抱歉,这是一个拼写错误,已修复。