Решето Эратосфена можно очень аккуратно реализовать в Haskell, используя ленивость для генерации бесконечного списка, а затем удаляя все кратные началу списка из его хвоста:
Код: Выделить всё
primes :: [Int]
primes = sieve [2..]
sieve (x:xs) = x : sieve [y | y 0]
Я пытаюсь научиться использовать потоки в Java 8, но не понимаю, есть ли способ добиться того же результата в Java, что и в приведенном выше коде Haskell. Если я рассматриваю ленивый список Haskell как эквивалент потока Java, кажется, что мне нужно взять поток, начинающийся с 2, и создать новый поток с удалением всех кратных 2, а затем взять этот поток и создать новый поток со всеми кратные 3 удалены, и...
И я понятия не имею, как действовать.
Есть ли какой-нибудь способ сделать это, или я обманываю себя, когда пытаюсь думать о потоках Java как о списках Haskell?
Подробнее здесь:
https://stackoverflow.com/questions/437 ... atosthenes