1. Куча / Говнокод #15665

    +118

    1. 1
    f g l = hylo l (.) (\n -> (g, n-1)) (==0)

    Этот пример использует hylomorphism.
    Композируем функцию типа (.) g(l) пока не наступит n==0

    Запостил: HaskellGovno, 04 Апреля 2014

    Комментарии (19) RSS

    • Вы ещё котоморфизм не видели. Компосирование функций - это только начало.
      Ответить
      • > Вы ещё котоморфизм не видели.
        Только не говори мне что быдло не может катаморфизм.
        Ответить
        • Что такое катаморфизм?
          Ответить
          • Омг. Борманда первый раз на моей памяти заминусовали. Но заслуженно надо сказать.
            А вообще любой уважающий себя человек должен знать это.
            http://habrahabr.ru/post/57503/
            Ответить
            • катаморфизм в функциональном программировании — это обобщение свертки списков <...> на произвольные размеченные объединения.

              Пля. Тупо обобщенная свёртка ;) А я думал, что это какая-то неведомая херь из теории категорий, недоступная для понимания простым смертным...

              P.S. Как оказалось, я даже юзал этих котоморфизмов в крестах, когда перечислял файлы на диске ;)
              Ответить
              • А ты лямбды накапливал в аккумулятор в крестах?
                Ответить
                • Зачем? Просто возвращал поддерево.

                  Может я неправильно понял этот катаморфизм?
                  - есть некая структура данных;
                  - есть функция, принимающая результат обработки некоторых нод этой структуры, и возвращающая что-нибудь;
                  - катаморфизм - просто алгоритм обхода, который вызывает эту функцию для каждой ноды.

                  А вся эта фигня с ленью, аккумуляторами и лямбдами вроде бы является деталью реализации и не имеет никакого отношения к самой идее...
                  Ответить
            • > Борманда первый раз на моей памяти заминусовали. Но заслуженно надо сказать.
              49 человек знало, что такое катаморфизм, и презирало борманда за его незнание. А еще 44 не знало, и сочувствовало.
              Ответить
    • Хуйломорфизм? Хуйню какую-то ты гонишь, Хуйло.
      Ответить
      • Хм.
        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.
        Ответить
        • Я правильно понимаю, deforestation - это вместо списка в hylomorphism используют IEnumerable?
          Ответить
          • Хуй бы знал, что такое эти ваши хиломорфизмы, анаморфизмы и прочие ананизмы...

            Но deforestation емнип склеивает producer'а и consumer'а, выкинув промежуточную структуру данных.

            Т.е. был некий алгоритм, который возвращал дерево, и второй алгоритм, который полученное дерево оббегал. А после deforestation'а получился алгоритм, который сразу делает и то и то, не храня это дерево.
            Ответить
            • Т.е. если я на сишке юзаю readdir для сканирования каталогов, но дерево не создаю в памяти, а сразу считаю какой-нибудь суммарный объем, то это хиломорфизм? :)

              Пиздец.

              P.S. Ну хотя в хаскеле этот хиломорфизм, видимо, должен принимать те самые два алгоритма (producer и consumer), и склеивать их... Рукопашная дефорестация не рулит.
              Ответить
              • А что в коде типикстартера происходит? Я что-то не пойму как он свзан с хуйломорфизмом.
                Ответить
                • > Я что-то не пойму как он свзан с хуйломорфизмом.
                  Та фиг бы знал... Он юзает функцию hylo :) Можешь ее определение кинуть?
                  Ответить
                  • Гуглится же:
                    http://stackoverflow.com/questions/7423123/how-to-call-the-same-function-n-times
                    Ответить
                    • А ржака. Он в другом треде только что наклал код applyNTimes. Прикиньте если он только сейчас придумал как написать эту функцию спустя столько времени после того как нагуглил код на стековерфловочке
                      Ответить
                      • http://hackage.haskell.org/package/category-extras-0.53.5/docs/Control-Morphism-Hylo.html

                        http://stackoverflow.com/questions/921972/what-are-zygo-meta-histo-para-futu-dyna-whatever-morphisms

                        Гыгы, Бивис. Зигаморфизм.
                        Ответить
    • показать все, что скрытоcleaned
      Ответить

    Добавить комментарий