Math Haskell中的求和符号
在维基百科的页面上,关于它的描述是Haskell中的等效操作是使用foldl。我的问题是:有什么理由说用这个代替总和?是一个比另一个更“纯粹”,还是没有真正的区别?我看不出在维基百科的页面上有什么关于Haskell或Math Haskell中的求和符号,math,haskell,recursion,sum,Math,Haskell,Recursion,Sum,在维基百科的页面上,关于它的描述是Haskell中的等效操作是使用foldl。我的问题是:有什么理由说用这个代替总和?是一个比另一个更“纯粹”,还是没有真正的区别?我看不出在维基百科的页面上有什么关于Haskell或foldl的内容,但Haskell中的sum只是foldl的一个更具体的例子。它可以这样实现,例如: sum l = foldl (+) 0 l 可简化为: sum = foldl (+) 0 没有区别。该页面只是说sum是使用foldl实现的。只要使用sum计算一系列数字的和就
foldl
的内容,但Haskell中的sum
只是foldl
的一个更具体的例子。它可以这样实现,例如:
sum l = foldl (+) 0 l
可简化为:
sum = foldl (+) 0
没有区别。该页面只是说
sum
是使用foldl
实现的。只要使用sum
计算一系列数字的和就行了。正如其他人所说,没有区别。然而,sum调用比fold调用更容易阅读,所以如果需要求和,我会选择sum。foldl
是一个通用的reduce函数。递归是函数式编程语言中处理项目列表的常用方法,它提供了一种循环迭代的替代方法,这种方法通常要优雅得多。对于像fold
这样的reduce函数,尾部递归实现。正如其他人所解释的,sum
只是foldl(+)0l
的一种方便的助记符
它在维基百科页面上的使用大概是为了说明通过尾部递归求和的一般原理。但是,由于Haskell库包含sum
,它较短且更容易理解,因此您应该在代码中使用它
这是一个Haskell的代码>折叠< /COD>函数,有简单的例子,值得阅读。
< P>一个值得注意的是,和可能比你想要的要懒惰,所以考虑使用Fordl’< /P> < P>求和的概念可以扩展到非数字类型:你所需要的是等价于(+)运算和零值的东西。换言之,你需要一个新的选择。这导致Haskell函数“mconcat”,它返回一个幺半群类型的值列表的总和。默认的“mconcat”当然是根据“mappend”定义的,这是一个加号操作。Aah,现在我看到了。我搜索了“foldl”,但维基百科页面使用了“fold”。