Рекурсия и итерация.

Apr 25, 2007 17:05

Похоже, что спор в моей голове о том, может ли любой рекурсивный алгоритм быть преобразован в итеративный (циклический), у меня разрешился. Кажется точку ставит следующие отношение, которое я нашел здесь:

foldl f v xs = foldr (λx g →(λa → g (f a x))) id xs v
Давайте рассмотрим подробнее определения функций foldl и foldr.

foldr f v [] = v
foldr f ( Read more... )

haskell, catamorphism, fp

Leave a comment

Comments 35

inv2004 April 25 2007, 13:20:59 UTC
спасибо, всё так чётко расписано, что для себя я тоже закрою эту тему.

Reply

mibori April 25 2007, 13:55:47 UTC
Кстати, _darkus_ перевел док, на русский.

А еще надо прокачать этот скилл.

Reply

lomeo April 25 2007, 15:32:26 UTC
_darkus_ также перевел статью о катаморфизме[WIKI] на русский[WIKI].

Reply

mibori April 25 2007, 20:38:21 UTC
О, спасибо. А слона то я и не приметил :)

Reply


lomeo April 25 2007, 15:33:57 UTC
Оператор свёртки написать можно для любого алгебраического типа данных, а значит можно написать универсальный (generic).

Reply

nealar April 26 2007, 09:50:03 UTC
В Epigram называется "eliminator" - штука, которая каноническим способом уничтожает тип данных. Для списка - fold, для дерева - какой-то деревянный fold, для натурального - матиндукция, для Bool - ifthenelse.

Reply

lomeo April 27 2007, 09:47:28 UTC
интересно, спасибо! я вообще на эпиграм давно хочу поглядеть :-)

Reply


Leave a comment

Up