Версия для печати
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум на Исходниках.RU > Алгоритмы > Терминология ФП |
Автор: Serafim 23.11.17, 04:17 |
Признаться, хз куда задавать такие вопросы, по-этому остановился на этом "общем" для всех языков разделе. Так что заранее извиняюсь. Вопроса, собственно, два: 1) Можно ли утверждать, что моноид при переносе на ООП сленг - это тупо делегирование какого-то объекта другом такому объекту. 2) Является ли switch/case грубым приближением паттерн-матчинга? Я вот думаю, думаю, смотрю всякие котлины, F#, хаскели и не понимаю почему это называется именно так, а не как принято у ООП'шников и процедурщиков =) |
Автор: JoeUser 23.11.17, 18:45 |
Цитата Serafim @ 1) Можно ли утверждать, что моноид при переносе на ООП сленг - это тупо делегирование какого-то объекта другом такому объекту. Ох и в дебри ты полез... Судя по определению термина "моноид", это может быть, а может и не быть. Для того, чтобы "было" нужно выполнение ряда условий, которые делегирование может и не обеспечивать. Возьми разверни понятие "мноноид" до определение в базовых терминах, получится что: Моноид - это совокупность различных элементов с заданной на нём операцией двух аргументов, обладающей сочетательностью (ассотиативностью) и имеющей один элемент такой, что при выполнении бинарной операции с ним - результат не изменяется. Вот сколько требований. А теперь представим два объекта классов разной природы - один порождает массив значений, второй массив функторов. Какие операции из этих объектов могут позволить получить моноид? По формальному определению паттерн-матчинга - является. |
Автор: Serafim 24.11.17, 13:31 |
Цитата JoeUser @ Ох и в дебри ты полез... Судя по определению термина "моноид", это может быть, а может и не быть. Для того, чтобы "было" нужно выполнение ряда условий, которые делегирование может и не обеспечивать. Возьми разверни понятие "мноноид" до определение в базовых терминах, получится что: Моноид - это совокупность различных элементов с заданной на нём операцией двух аргументов, обладающей сочетательностью (ассотиативностью) и имеющей один элемент такой, что при выполнении бинарной операции с ним - результат не изменяется. Вот сколько требований. А теперь представим два объекта классов разной природы - один порождает массив значений, второй массив функторов. Какие операции из этих объектов могут позволить получить моноид? Я тут чуть глубже залез. И есть подозрение, что функции, вида (на псевдоязыке): <{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}> // def fun map(<T>[], Function<A, B>): <T>[] { ... } // invoke map([1, 2, 3], fun(index, value) -> value * 2) Являются функторами. А монады - это группы таких функторов, позволяющие "чейнить" функторы: <{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}> monad1 = [1, 2, 3].map(...).filter(...).concat(monad2) Т.е. как ты верно заметил, делегирование - это лишь одно из условий. |