3.3. Primes (with better efficiency)
primes = sieve [2..] where sieve (p:xs) = p : (sieve (remove p xs)) where remove what (a:as) | a < what = a:(remove what as) | a == what = (remove (what+p) as) | a > what = a:(remove (what+p) as) |
primes = sieve [2..] where sieve (p:xs) = p : (sieve (remove p xs)) where remove what (a:as) | a < what = a:(remove what as) | a == what = (remove (what+p) as) | a > what = a:(remove (what+p) as) |
Written by Shlomi Fish