- 1
f g l = hylo l (.) (\n -> (g, n-1)) (==0)
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+118
f g l = hylo l (.) (\n -> (g, n-1)) (==0)
Этот пример использует hylomorphism.
Композируем функцию типа (.) g(l) пока не наступит n==0
HaskellGovno 04.04.2014 13:02 # 0
LispGovno 06.04.2014 11:12 # 0
Только не говори мне что быдло не может катаморфизм.
bormand 06.04.2014 15:42 # 0
LispGovno 04.05.2014 01:50 # +2
А вообще любой уважающий себя человек должен знать это.
http://habrahabr.ru/post/57503/
bormand 04.05.2014 11:07 # +4
Пля. Тупо обобщенная свёртка ;) А я думал, что это какая-то неведомая херь из теории категорий, недоступная для понимания простым смертным...
P.S. Как оказалось, я даже юзал этих котоморфизмов в крестах, когда перечислял файлы на диске ;)
LispGovno 04.05.2014 11:58 # +3
bormand 04.05.2014 13:37 # +1
Может я неправильно понял этот катаморфизм?
- есть некая структура данных;
- есть функция, принимающая результат обработки некоторых нод этой структуры, и возвращающая что-нибудь;
- катаморфизм - просто алгоритм обхода, который вызывает эту функцию для каждой ноды.
А вся эта фигня с ленью, аккумуляторами и лямбдами вроде бы является деталью реализации и не имеет никакого отношения к самой идее...
bormand 04.05.2014 11:09 # +3
49 человек знало, что такое катаморфизм, и презирало борманда за его незнание. А еще 44 не знало, и сочувствовало.
LispGovno 06.04.2014 11:11 # +1
LispGovno 04.05.2014 12:01 # 0
In computer science, and in particular functional programming, a hylomorphism is a recursive function, corresponding to the composition of an anamorphism (which first builds a set of results; also known as 'unfolding') and a catamorphism (which then folds these results into a final return value). Fusion of these two recursive computations into a single recursive pattern then avoids building the intermediate data structure. This is a particular form of the optimizing program transformation techniques collectively known as deforestation. A related type of function is a metamorphism, which is a catamorphism followed by an anamorphism.
LispGovno 04.05.2014 12:08 # +2
bormand 04.05.2014 13:50 # +1
Но deforestation емнип склеивает producer'а и consumer'а, выкинув промежуточную структуру данных.
Т.е. был некий алгоритм, который возвращал дерево, и второй алгоритм, который полученное дерево оббегал. А после deforestation'а получился алгоритм, который сразу делает и то и то, не храня это дерево.
bormand 04.05.2014 13:55 # +2
Пиздец.
P.S. Ну хотя в хаскеле этот хиломорфизм, видимо, должен принимать те самые два алгоритма (producer и consumer), и склеивать их... Рукопашная дефорестация не рулит.
LispGovno 04.05.2014 13:56 # 0
bormand 04.05.2014 13:59 # 0
Та фиг бы знал... Он юзает функцию hylo :) Можешь ее определение кинуть?
LispGovno 04.05.2014 14:01 # 0
http://stackoverflow.com/questions/7423123/how-to-call-the-same-function-n-times
LispGovno 04.05.2014 14:03 # 0
LispGovno 04.05.2014 14:05 # +1
http://stackoverflow.com/questions/921972/what-are-zygo-meta-histo-para-futu-dyna-whatever-morphisms
Гыгы, Бивис. Зигаморфизм.
xavij 06.04.2014 15:46 # −52