我需要一个像这样简单的树形结构,带有所有调整 -
type 'a Tree =
| Leaf of 'a
| Branch of 'a Tree list
肯定有类似的东西已经存在,包括添加、删除、映射、筛选、折叠等函数,但我找不到。甚至从OCaml也没有一个我可以移植的...如果必要,我可以自己编写。
编辑:更改树结构以使其更明显。
type 'a Tree =
| Leaf of 'a
| Branch of 'a Tree list
肯定有类似的东西已经存在,包括添加、删除、映射、筛选、折叠等函数,但我找不到。甚至从OCaml也没有一个我可以移植的...如果必要,我可以自己编写。
编辑:更改树结构以使其更明显。
我认为困难在于一个简单的树(例如add Tree Tree
)不会被任何人使用。如果没有指定更具体的树类型,您将不得不通过扫描来实现所有这些方法,从而降低性能。
此外,不可变树的原地更新非常昂贵,因为在典型设计中共享数据结构很少。
最后,如果允许任何形式的回溯,则必须完全重写不可变树。
Tree<_>
类型,带有ofSeq
和toSeq
函数,在大多数情况下已经足够了。然后,您可以按照以下基本顺序利用Seq
模块中的map
、reduce
等函数:toSeq
>Seq.(op)
>ofSeq
。这还使得更改遍历顺序(DFS、BFS)变得更容易,而不是将其嵌入到每个函数中。 - DanielBranch(_, [Empty, Empty, Empty, ...])
吗? - Daniel