[英]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.