[英]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]
。
根据定义:
阿半群是一组是一个关联二进制运算下关闭
+
和具有标识元素I
在S
使得对于所有a
在S
,我+ a = a + I = a
。一个Monoid必须包含至少一个元素。
令+
为Monoid[String]
的二进制运算。 对于任意两个字符串a
和b
, a + b
也是String
,因此二进制操作在String
类型上关闭。 没有严格的证据,我们也知道它是关联的。
即对于所有字符串a
, b
和c
:
(a + b) + c == a + (b + c)
我们也有一个标识元素""
(空字符串),因为对于任何字符串a
, a + "" == a
和"" + a == a
。
其二元运算也是可交换性的单面体称为可交换单面体 。 而且您显然不能使用+
操作为String
提供可交换的monoid。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.