I am trying to imitate a sieve to find the whole number less than some number using Haskell. I found another Haskell program using the Sieve method at high speed. However, the following recursive function that I wrote is very slow. The code is as follows
sieve' :: Integer -> Integer -> [Integer]
sieve' n 1 = [2 .. n]
sieve' n (k + 1) | [x | x <- sieve' n k, x == k + 1] == [] = sieve' n k
|otherwise = [x | x <- sieve' n k, x == k + 1 || not (mod x (k + 1) == 0)]
sieve :: Integer -> [Integer]
sieve n = sieve' n n
Sieve 20 takes about 2 minutes. City 30 is not finished when I write this question.
Can anyone explain why this recursive function is so slow. Thanks for any help you can provide.
source
share