viernes 22 de junio de 2007

Java vs. Haskell: Buscando números primos

¿Cuántas líneas de código Java llevaría implementar una función que devuelva los n primeros números primos?

En Haskell, llevaría menos de 15, con comentarios y buen estilo incluídos:
module Primes where

-- Función que devuelve los n primeros números primos
primes :: Int -> [Int]
primes n = take n allThePrimes

-- Lista infinita de números primos
allThePrimes :: [Int]
allThePrimes = sieve (iterate (+1) 2)

-- Implementación de la Criba de Eratóstenes
sieve :: [Int] -> [Int]
sieve (x:xs) = x:sieve (filter (notMultiple x) xs)
where notMultiple x y = y `mod` x /= 0