Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
Маленькое примечание к этому типу: filter (<10) primes ->> [2,3,5,7, никогда не завершит своего выполнения, т.к. filter не знает, будут ли числа меньше 10 или нет и продолжает их искать.
Да вроде нет, filter ничем не отличается от других ленивых функций.Автор имеет в виду, что простых чисел, меньших 10 конечное число, но filter никогда об этом не узнает.
filter обязана проверить каждый элемент листа который ей передаётся, в то время как takeWhile берет элемент за элементом пока условие выполняется. Функция filter в любом случае никогда не завершит своего выполнения при работе с бесконечными потоками (ведь даже filter (>100) primes никогда не завершается, и понятно почему). Можно рассматривать primes как строго возрастающую функцию, и только благодаря этому свойству takeWhile (<10) primes «фильтрует» список правильно.Принцип «Разделяй и властвуй», а также бесконечные потоки в Haskell
[sum [2..n] | n < — primes] ->> [2,5,14,27,65,90,… поток сум простых чисел
Принцип «Разделяй и властвуй», а также бесконечные потоки в Haskell