我有树数据类型:
data Tree a = Node
{ rootLabel :: a, -- label value
subForest :: [Tree a] -- zero or more child trees
}
{-- Node (a) [] ..or... Node (a1) [ Node (a2) [..], Node (a3) [..] ] --}
Run Code Online (Sandbox Code Playgroud)
我需要编写treeFold函数,我认为我需要第一个用标签值创建的函数和第二个函数,它取两个func1的结果并得到一些最终结果,依此类推.我开始编写递归函数treeFold,为具有0个子树的最小树写函数,但是我无法完成我的函数,因为没有子树的空列表.
我需要把第一个孩子和其余的孩子列表并从中创建新树以使用这个新树进行递归调用?
treeFold :: (a -> b) -> (b -> b -> b) -> Tree a -> b
treeFold func1 _ (Node a1 []) = func1 a1
treeFold func1 func2 (Node a1 [y]) = func2 (func1 a1) (treeFold func1 func2 …Run Code Online (Sandbox Code Playgroud)