如何总结一个n-ary Haskell树的元素?

时间:2015-03-06 15:08:40

标签: algorithm haskell tree

我是Haskell编程的新手,我试图编写和操作定义为

的Haskell n-ary树
data Tree = Empty | Node Integer [Tree] 

我想为这个树结构编写一个sum函数,但我没弄明白。我编码的函数在这里:

sumall Empty = 0

sumall (Node a (x:xy) ) = a + (sumall x)

输入:(Node 5 [Node 2 [Node 1 [Empty]],Node 8 [Node 7 [Node 6 [Empty]],Node 12 [Node 10 [Node 9 [Empty]],Node 13 [Node 15 [Empty]]]]] )

结果= 8。

如何开发此函数来汇总此树中的所有元素?提前谢谢。

1 个答案:

答案 0 :(得分:3)

import qualified Data.Foldable as F

instance F.Foldable Tree where
    foldMap f Empty = mempty
    foldMap f (Node a ts) = mconcat $ f a : map (F.foldMap f) ts

sumall = F.sum

没有可折叠你会做类似

的事情
sumall Empty = 0
sumall (Node a ts) = a + foldr (+) 0 (map sumall ts)