在关于求和的维基百科页面上,它说 Haskell 中的等效操作是使用foldl。我的问题是:有什么理由说要使用 this 而不是sum?一个比另一个更“纯粹”,还是没有真正的区别?
问问题
1500 次
6 回答
3
我看不到它在哪里说有关 Haskell 或foldl
在该 Wikipedia 页面上的任何内容,但sum
在 Haskell 中只是foldl
. 可以这样实现,例如:
sum l = foldl (+) 0 l
可以简化为:
sum = foldl (+) 0
于 2009-08-27T06:26:22.277 回答
2
需要注意的一件事是 sum 可能比您想要的更懒惰,因此请考虑使用 foldl'。
于 2009-08-27T11:05:33.540 回答
1
正如其他人所说,没有区别。但是,求和调用比折叠调用更容易阅读,所以如果你需要求和,我会选择求和。
于 2009-08-27T06:44:04.160 回答
0
没有区别。该页面只是说sum
使用foldl
. 只需sum
在需要计算数字列表的总和时使用。
于 2009-08-27T06:38:53.187 回答
0
求和的概念可以扩展到非数字类型:您所需要的只是相当于 (+) 操作和零值的东西。换句话说,你需要一个monoid。这导致了 Haskell 函数“mconcat”,它返回一个 monoid 类型的值列表的总和。默认的“mconcat”当然是根据“mappend”定义的,它是加号操作。
于 2009-08-30T15:54:06.757 回答