Haskell — достаточно необычный язык. И несмотря на немалое количество статей по нему, нередко можно столкнуться с мнением, что всё это помогает лишь в синтетических примерах. И действительно: на простых примерах всё выглядит просто, но куда сложнее представить себе хотя бы небольшую программу в таком стиле, а статьи зачастую рассматривают лишь особенности языка.
Хаскель является чистым и ленивым функциональным языком; это значит, что результат функции зависит только от аргументов, т. е. будучи вызванной с одним аргументом, функция всегда вернёт один и тот же результат. Поэтому здесь нет переменных — есть функции и значения — однако это никак не мешает. Ленивость означает, что значение будет вычислено только тогда, когда оно действительно понадобится, что позволяет работать с бесконечными списками и структурами данных.
Бесконечные списки.
Бесконечный список можно определить через корекурсию — операцию, подобную рекурсии, но не свёртывающую структуру данных (уменьшение значения аргумента тоже можно назвать свёртыванием) , а «развёртывающую» результат (Total FP) на основе изначальных аргументов:
ghci> let ones = 1 : ones
ghci> take 5 ones
[1,1,1,1,1]
Благодаря ленивости, полученная бесконечная структура данных (в данном случае ones — это список, в голове которого находится 1, а в хвосте — сам ones, т. е. это бесконечный список единиц) не вычисляется без необходимости, и ей можно пользоваться как обычно. Где это может пригодиться на практике? Например, в строгих языках необходимо заранее знать количество элементов списка, что заставляет в месте создания списка знать лишнюю деталь реализации. Либо приходится создавать какой-нибудь генератор, который вызовут уже «наверху» . Здесь же мы можем просто создать бесконечный список, а нужную часть из него возьмут тогда, когда она потребуется.
Еще посмотрите здесь:
http://forum.vingrad.ru/forum/topic-326400.html
http://norniel.livejournal.com/6085.html
Дополнительное образование
что такое корекурсия? прочитал статью в википедии и нечегч не поня
Похожие вопросы
- здравствуйте. Возможно ли разделить википедию на тома с равным количеством статей?
- какие интересные книги можно прочитать чтобы стать умнее...?)
- Сколько надо прочитать книг в определенной направлении чтобы стать хотя бы не экспертом но хотя бы быть успешным в этом?
- Какие книги стоит (необходимо) прочитать?
- Как научиться хорошо запоминать прочитанное в книге или услышанное по телевизору например?
- Вопрос относительно серьезный! Какую книгу посоветуете прочитать?
- Что такое википедия?
- От какого слова появилось слово "Википедия"???
- что такое. фразеологизмы??обьясните по русски,а то в википедии ничо не понятно
- Допустим читаю текст, и вдруг понимаю что думаю не о том что читаю, а о чем то другом. И получается что почитав прочитав