Scala 的列表是否在连接运算符下形成幺半群?



首先,对不起,我不是以英语为母语的人。不过,我会尽力做到最好。

事实上,我把学习一些理论概念作为一种爱好,以加深我对函数编程的理解,并有一些问题需要检查我是否正确理解了什么是monoid

首先,我发现的monoid的定义是,monoid是一个在关联二元运算下闭合的集合,并且有一个恒等元素。我想是对的?

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

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

首先,我发现的单半群的定义是,单半群是在关联二进制运算下闭合的集合,并且具有恒等元素。我想是对的?

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

因此,使用以下定义,我假设Scala的列表在:::运算符下形成了一个monoid,因为List是一个集,::是关联的(xs::(ys:::zs(=(xs:::ys(:::zss(,List有一个基元素(Nil(。我说得对吗?

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

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

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

最新更新