嗨,我对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
答案 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
,因为求和的结果是单个值,而不是列表。