0

为什么列表长度上方的折叠不是幺半群?

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

它不是关联的并且具有中性元素0,因此它应该是一个幺半群吗?

4

1 回答 1

3

我很难理解你真正在问什么,而且我怀疑你演讲中声明的确切措辞可能很重要。

但是根据我能想到的最直观的解释,你是对的,从数学上讲,该length函数一个“幺半群同态”,将具有连接运算的列表的幺半群映射到具有加法运算的整数的幺半群。

在 Haskell 中技术上并非如此,但主要是因为数字类型没有给出Monoid实例,因为有两个明显的操作可供选择,加法和乘法。另一个原因是 Haskell 中的列表可以是无限的,因此length并不总是给出结果。

于 2015-07-12T17:30:44.750 回答