繁体   English   中英

Monoid [String]是scala中的一个Monoid吗?

[英]Is Monoid[String] really a Monoid in scala

我目前正在学习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

因此,说结合性需要代数性来满足偏半定律是合法的吗? 那么,字符串Monoid是否有效?

那么说结社性要求交换性来满足类半体律是合法的吗?

不可以。二进制运算不需要是可交换的就可以关联。 ("Foo" + "Bar") == ("Bar" + "Foo")为假的事实与+String.关联的事实无关String.

那么,字符串Monoid是否有效?

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

根据定义:

阿半群是一组是一个关联二进制运算下关闭+和具有标识元素IS使得对于所有aS ,我+ a = a + I = a

一个Monoid必须包含至少一个元素。

+Monoid[String]的二进制运算。 对于任意两个字符串aba + b也是String ,因此二进制操作在String类型上关闭。 没有严格的证据,我们也知道它是关联的。

即对于所有字符串abc

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

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

其二元运算也是可交换性的单面体称为可交换单面体 而且您显然不能使用+操作为String提供可交换的monoid。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM