Я хотел использовать этот код решета Эратосфена с этой страницы: http://en.literateprograms.org/Sieve_of_Eratosthenes_(Haskell)#chunk DEF: primes_naiveHaskell: неисчерпывающему модели с Решето Эратосфена
только немного изменен, поэтому он показывает только простые числа до числа :
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
Я знаю, что эта ошибка из рекурсивных функций, где, например, случаи ми ssing, но что здесь отсутствует?
Хотя состав выглядит как сито Эратосфена, оценка на самом деле отличается и очень медленная. Вас может заинтересовать [эта статья] (https://www.cs.hmc.edu/~oneill/papers/Sieve-JFP.pdf). –
измените его на '' сито (p: xs) | p * p <= m = p: сито [x | x <- xs, x 'mod' p> 0] | иначе = (p: xs) '' для исправления и огромного ускорения. –