Haskell生成列表的总和

时间:2015-01-03 11:18:15

标签: list haskell sum

嗨,我对haskell很新,我想制作一个带素数的程序。 使用下面的代码,我将所有素数放在一个列表中的2个整数之间,现在我想对生成列表的所有素数进行求和,并将其显示为答案。

primesR :: Integral a => a -> a -> [a]
primesR a b = takeWhile (<= b) $ dropWhile (< a) $ sieve [2..]
  where sieve (n:ns) = n:sieve [ m | m <- ns, m `mod` n /= 0 ]

我没有找到生成列表总和的任何示例。有谁知道我如何在代码中管理这个?

THX

1 个答案:

答案 0 :(得分:4)

只需使用sum功能,如下所示:

primesR :: Integral a => a -> a -> a
primesR a b = sum $ takeWhile (<= b) $ dropWhile (< a) $ sieve [2..]
       where sieve (n:ns) = n:sieve [ m | m <- ns, m `mod` n /= 0 ]

请注意,您需要将函数签名从Integral a => a -> a -> [a]更改为Integral a => a -> a -> a,因为求和的结果是单个值,而不是列表。