的筛非详尽的模式我想使用埃拉托色尼的筛的这段代码从该页面:http://en.literateprograms.org/Sieve_of_Eratosthenes_(Haskell)#chunk DEF:primes_naive哈斯克尔:与埃拉托色尼
只有一点修改,所以它只显示了素数高达数:
primes :: Integral a => a -> [a]
primes m = sieve [2..m]
where
sieve (p:xs) = p : sieve [x|x <- xs, x `mod` p > 0]
但WinGHCi总是错误出现(例如10):
primes 10
[2,3,5,7*Main> *** Exception: eratosthenes.hs:4:5-55: Non-exhaustive patterns in function sieve
我知道,从递归函数,其中,例如案件英里此错误但是这里缺少什么?
尽管配方看起来像Eratosthenes的筛网,但评估实际上是不同的并且非常慢。您可能对[本文]感兴趣(https://www.cs.hmc.edu/~oneill/papers/Sieve-JFP.pdf)。 –
将其更改为“sieve(p:xs)|” p * p <= m = p:sieve [x | x < - xs,x'mod' p> 0] |否则=(p:xs)''为了修复和巨大的加速。 –