【发布时间】:2014-09-03 14:01:36
【问题描述】:
对于两个多路树,t1 和 t2,使用定义
type Forest a = [Tree a]
data Tree a = Node {
rootLabel :: a,
subForest :: Forest a
}
如何编写一个函数,从 t1 中删除子树并将其插入到 t2 中的给定节点?
我想签名看起来像
moveSubTree :: ((Tree x a) x (Tree x a)) -> (Tree x Tree)
即它需要一棵树和定义要删除的子树的父节点,以及定义插入原始子树的点的第二棵树和节点。
如果需要,可以组合删除然后添加子树的单独函数。
【问题讨论】:
-
什么是
x?此外,Haskell 没有指针。树值只是一棵树,而不是任何事物的子树。您需要提供一些方法来从树中获取子树,例如路径(索引列表)。 -
您必须比“...在 t2 中的给定深度插入它”更具体——在任何给定深度的树中可能有多个点,您想要哪个把它移到哪里?
-
这是有道理的——我应该把“插入到 t2 中的给定节点”。我会更新问题以反映这一点。
标签: function haskell recursion types functional-programming