【问题标题】:Sum of (func tree) elements(功能树)元素的总和
【发布时间】:2021-12-11 04:14:12
【问题描述】:

我正在努力寻找解决我上一个任务的方法。我必须实现一个函数sumSucc,它接受IntTree 并返回从succTree 获得的树元素的总和。

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

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。提前致谢。

【问题讨论】:

    标签: haskell recursion tree


    【解决方案1】:

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

    sumSucc :: IntTree -> Int
    sumSucc x = sumTree (succTree x)
    
    sumTree :: IntTree -> Int
    sumTree (Leaf x) = …
    sumTree (Branch (x, xl, xr)) = …

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

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

    sumSucc :: IntTree -> Int
    sumSucc = sumTree . succTree

    【讨论】:

    • 感谢您的回答,我其实已经考虑过辅助函数/变量来解决它。但我想知道是否有一种方法可以包含 sumSucc 中的所有内容。
    • @MatteoPinna:您可以在where 子句中定义sumSucc,使其仅在sumTree 函数中可用。
    • 是的,我不知道为什么我没有考虑在里面定义辅助函数。非常感谢。
    猜你喜欢
    • 2015-02-26
    • 2022-07-06
    • 1970-01-01
    • 1970-01-01
    • 2019-03-23
    • 1970-01-01
    • 1970-01-01
    • 2012-11-07
    • 2022-10-18
    相关资源
    最近更新 更多