Версия для печати
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум на Исходниках.RU > Алгоритмы > Терминология ФП


Автор: Serafim 23.11.17, 04:17
Признаться, хз куда задавать такие вопросы, по-этому остановился на этом "общем" для всех языков разделе. Так что заранее извиняюсь.

Вопроса, собственно, два:

1) Можно ли утверждать, что моноид при переносе на ООП сленг - это тупо делегирование какого-то объекта другом такому объекту.
2) Является ли switch/case грубым приближением паттерн-матчинга?

Я вот думаю, думаю, смотрю всякие котлины, F#, хаскели и не понимаю почему это называется именно так, а не как принято у ООП'шников и процедурщиков =)

Автор: JoeUser 23.11.17, 18:45
Цитата Serafim @
1) Можно ли утверждать, что моноид при переносе на ООП сленг - это тупо делегирование какого-то объекта другом такому объекту.

Ох и в дебри ты полез... :lol: Судя по определению термина "моноид", это может быть, а может и не быть. Для того, чтобы "было" нужно выполнение ряда условий, которые делегирование может и не обеспечивать. Возьми разверни понятие "мноноид" до определение в базовых терминах, получится что:

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

Вот сколько требований. А теперь представим два объекта классов разной природы - один порождает массив значений, второй массив функторов. Какие операции из этих объектов могут позволить получить моноид?

Цитата Serafim @
Является ли switch/case грубым приближением паттерн-матчинга?

По формальному определению паттерн-матчинга - является.

Автор: 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)


Т.е. как ты верно заметил, делегирование - это лишь одно из условий.

Powered by Invision Power Board (https://www.invisionboard.com)
© Invision Power Services (https://www.invisionpower.com)