如何正确使用haskell中的长度函数?
How do I properly use the length function in haskell?
我目前正在努力寻找 haskell 范围内的质数个数。该程序正确打印出素数范围。例如 countPrimesUntil 2 10 将打印出 [2, 3, 5, 7]。我正在寻找数字 4,因为它是 2 到 10 之间的素数的数量。如何正确合并 countPrimes?
import Data.List
countPrimesUntil :: Integral a=> a -> a -> [a]
countPrimesUntil a b = takeWhile (<= b) $ dropWhile (< a) $ sieve [2..]
while sieve (n:ns) = n:sieve [m | m <- ns, m `mod` n /= 0]
countPrimes n = length([x | x <- [2..n], countPrimesUntil x])
countPrimesUntil
命名错误;这不算什么。相反,它会生成一个介于 a
和 b
之间的素数列表。
当给定参数 2
和 n
.
时,您需要做的就是将 length
应用于 countPrimesUntil
的结果
countPrimes n = length (countPrimesUntil 2 n)
-- countPrimes = length . countPrimesUntil 2
在这种情况下,countPrimes
调用 countPrimesUntil 2 n
,并确定它的长度,因此:
countPrimes n = length (<strong>countPrimesUntil 2 n</strong>)
我目前正在努力寻找 haskell 范围内的质数个数。该程序正确打印出素数范围。例如 countPrimesUntil 2 10 将打印出 [2, 3, 5, 7]。我正在寻找数字 4,因为它是 2 到 10 之间的素数的数量。如何正确合并 countPrimes?
import Data.List
countPrimesUntil :: Integral a=> a -> a -> [a]
countPrimesUntil a b = takeWhile (<= b) $ dropWhile (< a) $ sieve [2..]
while sieve (n:ns) = n:sieve [m | m <- ns, m `mod` n /= 0]
countPrimes n = length([x | x <- [2..n], countPrimesUntil x])
countPrimesUntil
命名错误;这不算什么。相反,它会生成一个介于 a
和 b
之间的素数列表。
当给定参数 2
和 n
.
length
应用于 countPrimesUntil
的结果
countPrimes n = length (countPrimesUntil 2 n)
-- countPrimes = length . countPrimesUntil 2
在这种情况下,countPrimes
调用 countPrimesUntil 2 n
,并确定它的长度,因此:
countPrimes n = length (<strong>countPrimesUntil 2 n</strong>)