Я это как-то
писал, но напишу ещё раз, бо тема поднялась.
Недостатки явной рекурсии по сравнению с комбинаторами (ага, zip3):
- Рекурсия непонятна (согласен, это субъективное).
- Обычно используется с декомпозицией, нарушая инкапусляцию.
- Всегда используется для работы с элементами, вместо работы с коллекцией ( wholemeal programming).
- Цепочка вызовов
( Read more... )
Comments 52
Reply
Reply
Reply
Reply
Вот об этом было бы интересно подробнее послушать.
Reply
Зачем нам алгебраические структуры в самом деле? Чтобы их использовать! :-)
Ну, и в нагрузку ещё немножко про дизайн от Люка Палмера (правда, это оффтопик).
Reply
Кажется, ссылка потерялась, и ЖЖ вместо неё подставил адрес текущей страницы.
Reply
Reply
Reply
Reply
Структурная рекурсия, это один простой паттерн, легко укладывающийся в довольно простой Тьюринг-худой язык.
А значит, имеем простой и предсказуемый reasoning.
Что вполне подтверждается на практике.
Общая рекурсия заставляет думать в рамках уже Тьюринг-полноты, что в общем случае, неразрешимо даже теоретически, а не то, чтобы уложилось человеку в голову.
Конечно же, при реальном программировании, возникает ряд "паттернов" (навроде отслеживания разборки значения индуктивного типа), иначе бы было очень сложно сделать что-то.
Ну вот, структурная рекурсия, это один из таких паттернов - простой, чОтко формализованный и весьма общий.
Reply
Reply
Ему от этого становится лучше, да! ;-)
Reply
Reply
2. Этот пост возник из-за этой дискуссии. Т.е. "как заменить" уже есть.
Не стоит заменять. Если нужно, скажем, делать разбор двух структур по условию, то я пишу рекурсивный код. Пример: merge двух сортированных списков.
Reply
Reply
В качестве возможного примера могу предложить Omega monad: http://hackage.haskell.org/package/control-monad-omega
Комбинатор рекурсивной обработки потенциально бесконечных списков с гарантированным перечислением всех элементов.
Reply
Leave a comment