如何正确使用haskell中的长度函数?
Posted
技术标签:
【中文标题】如何正确使用haskell中的长度函数?【英文标题】:How do I properly use the length function in haskell? 【发布时间】:2022-01-11 06:11:48 【问题描述】:我目前正在努力尝试在 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])
【问题讨论】:
while
应该是where
【参考方案1】:
countPrimesUntil
命名错误;它不算什么。相反,它会生成一个介于 a
和 b
之间的素数列表。
当给定参数2
和n
时,您只需将length
应用于countPrimesUntil
的结果。
countPrimes n = length (countPrimesUntil 2 n)
-- countPrimes = length . countPrimesUntil 2
【讨论】:
【参考方案2】:在这种情况下,countPrimes
调用countPrimesUntil 2 n
,并确定它的长度,所以:
countPrimes n = length (<strong>countPrimesUntil 2 n</strong>)
【讨论】:
以上是关于如何正确使用haskell中的长度函数?的主要内容,如果未能解决你的问题,请参考以下文章