Haskell 如何使用函数组合获取所有正成员的总和?

Haskell how to get sum of all positive members using function composition?

我必须编写一个函数,从 Integer 列表中获取所有正数,将每个 10 相加,然后将所有正数相加,直到达到 maxNum。

我已经写了一些有点用的东西:

ff :: Integer -> [Integer] -> Integer
ff maxNum = (<=maxNum) . sum . map(+10) . filter(>0)

但问题是这个函数 returns 如果总和不大于 maxNum 则为真,如果总和更大则为假......据我所知,我非常接近我想要的......有人可以帮帮我???

您需要滚动总和,例如像

rollingSum [1..10] = [0,1,3,6,10,15,21,28,36,45,55]

毕竟sum只会给你最后的和,你需要检查中间的。

幸运的是,scanl (+) 0 提供了此功能。因此,只要它们小于 maxNum,您就可以获取滚动总和的数字,然后是 last 元素:

ff maxNum = last . takeWhile (<= maxNum) . scanl (+) 0 . map (+10) . filter (> 0)