【问题标题】:How to sum the elements of a n-ary Haskell Tree?如何对 n 元 Haskell 树的元素求和?
【发布时间】:2015-03-06 23:58:26
【问题描述】:

我是 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。

如何开发这个函数来对这棵树中的所有元素求和?提前致谢。

【问题讨论】:

  • 想想如何对列表的元素求和。

标签: algorithm haskell tree


【解决方案1】:
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

没有 Foldable 你会做类似的事情

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

【讨论】:

  • 树不是可折叠的 - 它甚至没有正确的种类。
  • 当然foldr (+) 0 x 只是写sum x 的更糟糕的方式。
  • @user2407038,确实如此。我没有粘贴我正在编码的data Tree a
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多