作为F#程序员的开始,我读过像this one这样的文章,描述了如何在F#中建模简单的树数据结构。
我想建模更复杂的树数据结构。考虑一个由单个根组成的树,该根具有多个子节点(主节点),每个节点都有多个节点(辅助节点)。
假设树有三种口味,它们基于根的种类(注意我说“亲切”而不是“类型” - 我还没有尝试任何模型。)
在F#中对此进行建模的好方法是什么? (注意:这是一个更复杂的数据结构的开始,其中节点可以有属性,当然会有遍历树的操作,但我会保存它以用于将来的问题。但是,作为一个例子,所有的根节点可能有一个Name,主节点有一个地址,辅助节点有一个电话号码。如果你对此有想法,请提及。)
答案 0 :(得分:2)
这是我涂鸦的类型:
type Node<'v, 'c> =
{
Value: 'v
Children: 'c list
}
或作为单一案例歧视联盟,如果您愿意:
type Node<'v, 'c> = N of 'v * 'c list
您可以在以后使用这样来模拟您拥有的第一个树味:
type R1 = obj
type P1 = obj
type S1 = obj
type Tree1 = Node<R1, Node<P1, S1>>
我假设您的R1
,P1
,S1
类型实际上是您希望节点携带的数据。
这样,树的最大深度和节点类型将反映在类型签名中。可以说,你不可能有任意深度的树(甚至更深层次),因为树的类型很快会变得笨重;)如果你只关心深度3树,那不是一个问题。