我尝试通过一棵树来总结所有路径,该树将每个级别从根扩展到最低子级 1 到 10 倍。
我的函数递归地遍历所有 child ,但是我遇到的问题是,当我尝试制作节点列表并在列表中执行此列表时,我变成了一个列表的列表......列表的列表。
我认为我的问题是组合步骤我试图制作一种模式匹配方法,但是当它变成列表列表时应该比较列表的方法,并且应该创建新列表并比较它们,如果它只是一种方式(满足列表与节点而不是带有列表的列表)不起作用。
最佳答案
summarize :: Tree a -> [[a]]
summarize Leaf = [[]]
summarize (Node a t1 t2) = do
t <- [t1, t2]
map (a:) (summarize t)
编辑:请注意,以上假设
Tree
具有以下定义:data Tree a = Leaf | Node a (Tree a) (Tree a)
编辑 #2:此版本的代码可能更清晰:
summarize :: Tree a -> [[a]]
summarize Leaf = [[]]
summarize (Node a t1 t2) = do
t <- [t1, t2]
summary <- summarize t
return (a:summary)
这个版本有一个很好的特性,它可以写成一个列表推导式:
summarize (Node a t1 t2) = [a:summary | t <- [t1, t2], summary <- summarize t]
关于Haskell 总结通过树的所有路径,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17503564/