我是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。
如何开发此函数来汇总此树中的所有元素?提前谢谢。
答案 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)