import Data.List -- funcion que toma dos listas ordenadas y sin repetidos, y retorna una lista -- con los elementos de la primera que no estan en la segunda minus (x:xs) (y:ys) = case (compare x y) of LT -> x : minus xs (y:ys) EQ -> minus xs ys GT -> minus (x:xs) ys -- [2..] representa la lista infinita: [2,3,4,5,...] -- erathos es la implenetación de la criba de erathostenes primes = eratos [2..] where eratos [] = [] eratos (p:xs) = p : eratos (minus xs [p, p+p..]) -- primes representa la lista infinita de todos los primos, pero como -- "take 20 primes" dice que solo se van a utilizar los 20 primeros, haskell -- solo calcula los primeros 20 main = print $ (take 20 primes)