2015-07-12 109 views
0

爲什麼摺疊上面的列表沒有幺半羣?功能上面的摺疊 - 單撇子

length = foldr (\_ n -> 1+n) 0

是不是關聯的,並且具有中性元素0,這樣它應該是一個幺?

+2

「fold」不是數據類型,是不是數據類型,所以它不能是一個monoid ...你是否意味着爲什麼數字不是monoids? – mniip

+0

我的意思是摺疊可以應用於可以構建單體的結構,甚至不可以 – fragant

+0

然後你問是否列表是一個monoid?是的。 – mniip

回答

3

我很難理解你真正要問的是什麼,我懷疑你的演講中聲明的確切措詞可能很重要。

但通過最直觀的解釋我能想到的,你是正確的,因爲在數學上,length功能一個「幺同態」,用結合動作列表的幺映射到整數與另外幺操作。

它在技術上並不是在Haskell中,但主要是因爲數字類型沒有被賦予Monoid實例,因爲有兩個顯而易見的操作來選擇加法和乘法。另一個原因是Haskell中的列表可能是無限的,所以length並不總是給出結果。