(func tree) 元素的总和

Sum of (func tree) elements

我正在努力寻找上一个作业的解决方案。我必须实现一个函数 sumSucc,它采用 IntTree 和 returns 从 succTree.

获得的树元素的总和

succTree 基本上是 returns 给定树的后继者,定义如下:

succTree :: IntTree -> IntTree
succTree t = tmap (+1) t

我知道我可以通过执行以下操作轻松解决此问题:

sumSucc :: IntTree -> Int
sumSucc (Leaf x) = x+1
sumSucc (Branch (x, xl, xr)) = (x+1) + sumSucc xl + sumSucc xr

但是我必须在sumSucc里面使用函数succTree。提前致谢。

你可以再实现一个函数sumTree,那么sumSucc就相当于:

sumSucc :: IntTree -> Int
sumSucc x = <strong>sumTree</strong> (succTree x)

<strong>sumTree :: IntTree -> Int</strong>
sumTree (Leaf x) = …
sumTree (Branch (x, xl, xr)) = …

因此您应该在此处实现 sumTree 部分。我把它留作练习。

sumSucc可以不用参数实现,利用(.) :: (b -> c) -> (a -> b) -> a -> c:

sumSucc :: IntTree -> Int
sumSucc = sumTree <strong>.</strong> succTree