首先,对不起,但我不是英语母语人士。但是,我会尽力而为。
我实际上是在学习一些理论概念,作为加深对函数式编程的理解的业余爱好,并有一些问题可用来检查我是否正确理解了类人动物。
首先,我发现的一个monoid的定义是,一个monoid是一个在关联二进制运算下关闭且具有标识元素的集合。我想这是正确的吗?
因此,使用以下定义,我假设Scala的列表在:::
运算符下形成一个monoid,因为List
是一个集合,:::
是关联的(xs ::: (ys ::: zs) = (xs ::: ys) ::: zs)
并且List
有一个基本元素(Nil
)。我说的对吗?
关于Monoid,关于::
List
运算符有什么要说的吗?我想不是因为它不是以两个列表作为参数,而是一个元素和一个List
。我还对吗?
答案 0 :(得分:4)
首先,我发现的一个monoid的定义是,一个monoid是一个在关联二进制运算下关闭且具有标识元素的集合。我想这是正确的吗?
据我所知,这是正确的。 (免责声明:我还在学习)。
因此,使用以下定义,我假设Scala的列表在:::运算符下形成一个monoid,因为List是一个集合,:::是关联的(xs :::(ys ::: zs)=( xs ::: ys)::: zs),而List具有基本元素(Nil)。我说的对吗?
也正确。
例如,这里是Monoid[List[A]]
中Cats的定义-这里是Monoid[List[A]]
中Scalaz的规范。
两者都是用于在Scala中进行功能编程的库/框架,并且您可以看到它们都使用:::
和Nil
定义了列表的Monoid。
关于Monoid,关于:: List运算符有什么要说的吗?我想不是因为它不是以两个列表作为参数,而是一个元素和一个List。我还对吗?
据我所知,您仍然是正确的。