Формирует ли список Scala моноид под оператором конкатенации? - PullRequest
0 голосов
/ 10 ноября 2018

Прежде всего, извините, но я не являюсь носителем английского языка. Однако я постараюсь сделать все возможное.

На самом деле я изучаю некоторые теоретические концепции как хобби, чтобы углубить свое понимание функционального программирования, и у меня есть несколько вопросов, чтобы проверить, правильно ли я понял, что такое моноид.

Прежде всего, определение моноида, которое я нашел, состоит в том, что моноид - это множество, которое замкнуто относительно ассоциативной бинарной операции и имеет единичный элемент. Я думаю, это правильно?

Итак, используя следующее определение, я предполагаю, что списки Scala образуют моноид под оператором :::, поскольку List является множеством, ::: является ассоциативным (xs ::: (ys ::: zs) = (xs ::: ys) ::: zs) и List имеет базовый элемент ( Nil). Я прав?

Что касается моноидов, есть ли что сказать об операторе :: List? Я полагаю, не потому, что в качестве параметров используются не два списка, а элемент и List. Я все еще прав?

1 Ответ

0 голосов
/ 10 ноября 2018

Прежде всего, определение моноида, которое я нашел, состоит в том, что моноид - это множество, которое замкнуто относительно ассоциативной бинарной операции и имеет единичный элемент. Я думаю, это правильно?

Насколько я знаю, это правильно. (отказ от ответственности: я все еще учусь) .

Итак, используя следующее определение, я предполагаю, что списки Scala образуют моноид под оператором :::, поскольку List является множеством, ::: ассоциативен (xs ::: (ys ::: zs) = ( xs ::: ys) ::: zs) и список имеет базовый элемент (ноль). Я прав?

Также верно.
Например, вот определение Monoid[List[A]] в Кошки - и вот спецификация Monoid[List[A]] в Scalaz .
Оба являются библиотеками / фреймворками для функционального программирования в Scala, и, как вы можете видеть, они оба определяют Monoid for List, используя ::: и Nil.

Что касается моноидов, есть что сказать об операторе :: List? Я полагаю не потому, что в качестве параметров используются не два списка, а элемент и список. Я все еще прав?

Опять же, насколько я знаю, вы все еще правы.

...