0

我目前正在学习 scala 中的类别理论,并且结合律说

(x + y) + z = x + (y + z)

当使用两个以上的值时,这很好

("Foo" + "Bar") + "Test" == "Foo" + ("Bar" + "Test") // true

在这种情况下,顺序无关紧要。但是,如果只有两个值怎么办。如果对于数字它仍然有效(可交换)但是当对字符串做同样的事情时它会失败。

3+1==1+3 // True
("Foo" + "Bar") == ("Bar" + "Foo") // Not commuative

那么说关联性需要交换性来满足幺半群定律是否合法?那么 String Monoid 仍然有效吗?

4

1 回答 1

4

那么说结合性需要交换性来满足幺半群定律是否合法?

不,二元运算不需要是可交换的才能是关联的。("Foo" + "Bar") == ("Bar" + "Foo")错误的事实与关联+的事实无关String.

那么 String Monoid 仍然有效吗?

是的,您可以拥有一个Monoid[String].

根据定义:

幺半群是在关联二元运算下闭合的集合,+并且具有单位元素IinS使得对于所有ain S, I + a = a + I = a

一个幺半群必须至少包含一个元素。

+为 a 的二元运算Monoid[String]。对于任意两个字符串,anda也是a ,所以二元运算对 type 是封闭的。如果没有严格的证明,我们也知道它是关联的。ba + bStringString

即对于所有字符串a,bc:

(a + b) + c == a + (b + c)

我们还有一个标识元素""(空字符串),因为对于任何字符串a和。a + "" == a"" + a == a

二元运算也是可交换的幺半群称为可交换幺半群。而且你显然不能有一个可交换的幺半群来String使用该+操作。

于 2015-10-05T15:20:32.210 回答