【发布时间】:2014-06-12 04:54:18
【问题描述】:
我正在尝试理解 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 认为 ron 是 person,而不是 family_tree?
【问题讨论】: