Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.133.160.156] |
|
Сообщ.
#1
,
|
|
|
Признаться, хз куда задавать такие вопросы, по-этому остановился на этом "общем" для всех языков разделе. Так что заранее извиняюсь.
Вопроса, собственно, два: 1) Можно ли утверждать, что моноид при переносе на ООП сленг - это тупо делегирование какого-то объекта другом такому объекту. 2) Является ли switch/case грубым приближением паттерн-матчинга? Я вот думаю, думаю, смотрю всякие котлины, F#, хаскели и не понимаю почему это называется именно так, а не как принято у ООП'шников и процедурщиков =) |
Сообщ.
#2
,
|
|
|
Цитата Serafim @ 1) Можно ли утверждать, что моноид при переносе на ООП сленг - это тупо делегирование какого-то объекта другом такому объекту. Ох и в дебри ты полез... Судя по определению термина "моноид", это может быть, а может и не быть. Для того, чтобы "было" нужно выполнение ряда условий, которые делегирование может и не обеспечивать. Возьми разверни понятие "мноноид" до определение в базовых терминах, получится что: Моноид - это совокупность различных элементов с заданной на нём операцией двух аргументов, обладающей сочетательностью (ассотиативностью) и имеющей один элемент такой, что при выполнении бинарной операции с ним - результат не изменяется. Вот сколько требований. А теперь представим два объекта классов разной природы - один порождает массив значений, второй массив функторов. Какие операции из этих объектов могут позволить получить моноид? Цитата Serafim @ Является ли switch/case грубым приближением паттерн-матчинга? По формальному определению паттерн-матчинга - является. |
Сообщ.
#3
,
|
|
|
Цитата JoeUser @ Ох и в дебри ты полез... Судя по определению термина "моноид", это может быть, а может и не быть. Для того, чтобы "было" нужно выполнение ряда условий, которые делегирование может и не обеспечивать. Возьми разверни понятие "мноноид" до определение в базовых терминах, получится что: Моноид - это совокупность различных элементов с заданной на нём операцией двух аргументов, обладающей сочетательностью (ассотиативностью) и имеющей один элемент такой, что при выполнении бинарной операции с ним - результат не изменяется. Вот сколько требований. А теперь представим два объекта классов разной природы - один порождает массив значений, второй массив функторов. Какие операции из этих объектов могут позволить получить моноид? Я тут чуть глубже залез. И есть подозрение, что функции, вида (на псевдоязыке): // def fun map(<T>[], Function<A, B>): <T>[] { ... } // invoke map([1, 2, 3], fun(index, value) -> value * 2) Являются функторами. А монады - это группы таких функторов, позволяющие "чейнить" функторы: monad1 = [1, 2, 3].map(...).filter(...).concat(monad2) Т.е. как ты верно заметил, делегирование - это лишь одно из условий. |