pha*_*haz 5 recursion f# record
我和朋友正在读F#,目前正在搞乱记录.
我们为代表一个人做了以下记录:
type Person =
{name: string;
father: Person;
mother: Person;}
Run Code Online (Sandbox Code Playgroud)
F#Interactive接受它,并且在某种程度上,类型是有意义的,除了我们看不到如何使用它.当我们试图申报一个人时,我们必须在申报时宣布父母,并依次申报他们的父母等等.有没有办法真正使用这种类型?如果没有,我们怎么能创造它呢?
PS:我们很清楚,由于父项是可选的,我们应该用选项(Some x | None)类型封装它们.
编辑
我的问题不是如何解决上述问题,已经在PS中编写了一个解决方案.我的问题是,我可以实际使用上述类型,例如声明上述表格的人事记录吗?如果没有,我必须做一个无法使用的类型.为什么我可以制作这样的类型?
kvb*_*kvb 11
Lee显示了一个更有用的定义,但您可以创建一个Person类型的实例:
let rec loopy = { name = "loopy"; father = loopy; mother = loopy }
Run Code Online (Sandbox Code Playgroud)
要么
let rec male = { name = "male"; father = male; mother = female }
and female = { name = "female"; father = male; mother = female}
Run Code Online (Sandbox Code Playgroud)
当然,如果你对真实的人进行建模,这些并没有任何帮助,但编译器并不知道.例如,如果您尝试定义循环,则类似的递归类型可能很有用.
如果您声明father和mother作为Parent option,那么你可以使用它像:
let f = { name = "Father"; father = None; mother = None }
let m = { name = "Mother"; father = None; mother = None }
let c = { name = "Child"; father = Some(f); mother = Some(m) }
Run Code Online (Sandbox Code Playgroud)
不使用Parent optionfor father,mother你必须创建一个"null parent"实例并使用它而不是None.