Мой дядя самых честных правил программ исходники за так ...

13 янв. 2009 г.

Решето Эратосфена на Хаскеле

Небольшая иллюстрация элегантности Хаскелля.

Классический алгоритм получения простых чисел методом Решето Эратосфена.

sieve :: (Integral a) => [a] -> [a] -> [a]
sieve (x:xs) (p:ps)
    | x `rem` p == 0 = sieve [y | y <- xs, y `rem` p /= 0] ps
    | otherwise = x : sieve xs (p:ps)

primes :: (Integral a) => [a]
primes = 2 : sieve [3..] primes

main :: IO ()
main = do
    print $ take 10 primes
    putStrLn "Press any key for exit ..."


Комментариев нет:

Отправить комментарий

Публикуются только комментарии, которые показались автору блога заслуживающими внимания.