簡體   English   中英

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)

但是問題是,如果總和不大於maxNum,則此函數返回true;如果總和不大於false,則返回false。據我所知,我已經很接近我想要的了。有人可以幫我嗎?

您需要一筆總和,例如

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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM