Scala的列表是否在串联运算符下形成一个monoid?

Arg*_*rth 5 functional-programming scala monoids scala-cats

首先,对不起,但我不是英语为母语的人。但是,我会尽力而为。

我实际上是在学习一些理论概念,以此作为加深对函数式编程的理解的兴趣,并提出一些问题来检查我是否正确理解了类人动物。

首先,我发现的一个monoid的定义是,一个monoid是一个在关联二进制运算下关闭且具有标识元素的集合。我想是对的吗?

因此,使用以下定义,我假设Scala的列表在:::运算符下形成一个Monoid (作为List一个集合),:::是关联的(xs ::: (ys ::: zs) = (xs ::: ys) ::: zs)并且List具有基本元素(Nil)。我对吗?

关于monoid,关于:: List操作员有什么要说的吗?我想不是因为它不是以两个列表作为参数,而是一个元素和一个List。我还对吗?

Lui*_*rez 4

首先,我发现的幺半群的定义是,幺半群是在关联二元运算下封闭的并且具有单位元的集合。我想这是正确的吧?

据我所知,这是正确的。(免责声明:我也在学习)

因此,使用以下定义,我假设 Scala 的列表在 ::: 运算符下形成一个幺半群,因为 List 是一个集合, ::: 是关联的 (xs ::: (ys ::: zs) = (xs ::: zs) : ys) ::: zs) 并且 List 有一个基本元素 (Nil)。我对吗?

也正确。
例如,这里是CatsMonoid[List[A]]中的定义 - 这里是Scalaz中的规范。 两者都是scala 中函数式编程的库/框架,正如您所看到的,它们都使用和定义了 List 的 Monoid 。Monoid[List[A]]
:::Nil

关于幺半群,关于 ::List 运算符有什么要说的吗?我想不是,因为它不采用两个列表作为参数,而是一个元素和一个列表。我还是对的吗?

据我所知,你仍然是对的。