首页 > 解决方案 > Scala 的列表是否在连接运算符下形成一个幺半群?

问题描述

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

我实际上是在研究一些理论概念作为一种爱好,以加深我对函数式编程的理解,并有一些问题要检查我是否正确理解了幺半群。

首先,我发现的幺半群的定义是,幺半群是一个在关联二元运算下闭合的集合,并且有一个单位元。我猜它是正确的?

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

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

标签: scalafunctional-programmingscala-catsmonoids

解决方案


首先,我发现的幺半群的定义是,幺半群是一个在关联二元运算下闭合的集合,并且有一个单位元。我猜它是正确的?

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

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

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

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

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


推荐阅读