如何正确使用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 命名错误;这不算什么。相反,它会生成一个介于 ab 之间的素数列表。

当给定参数 2n.

时,您需要做的就是将 length 应用于 countPrimesUntil 的结果
countPrimes n = length (countPrimesUntil 2 n)
-- countPrimes = length . countPrimesUntil 2

在这种情况下,countPrimes 调用 countPrimesUntil 2 n,并确定它的长度,因此:

countPrimes n = length (<strong>countPrimesUntil 2 n</strong>)