17得票1回答
为什么在使用复杂数据结构时,foldl' 会占用很多 RAM?

Lazy fold会占用很多RAM。在Data.List中,foldl'提供了一个使用严格求值的左折叠。例如,以下代码计算了1000万个零的总和,但RAM的使用量增加很小。sum0 = foldl' (+) 0 (replicate 10000000 0) 然而,对于复杂的数据结构,这似乎并不...

17得票4回答
复合多个“猫amorphism”时,何时为“猫amorphism”?

从http://research.microsoft.com/en-us/um/people/emeijer/Papers/meijer94more.pdf第3页可知: 一般情况下,猫态射并不满足合成的封闭性。 在什么条件下,猫态射才能组合成一个猫态射?更具体地(假设我正确理解了该...

16得票2回答
使用逗号运算符和可变模板参数包的折叠表达式

#include<iostream> using namespace std; template<typename ...Args> void output_argus(Args&&... args) { ((cout << ar...

16得票6回答
我的vimrc文件中无法保存代码折叠

我在我的 .vimrc 文件中添加了以下代码:" save and restore folds when a file is closed and re-opened autocmd BufWinLeave *.* mkview autocmd BufWinEnter *.* silent l...

16得票6回答
JavaScript中使用reduceRight的实际示例

前段时间,我在StackOverflow上发布了一个问题,展示了JavaScript中原生的reduceRight实现很麻烦。因此,我创建了一个类Haskell风格的foldr函数来解决这个问题: function foldr(array, callback, initial) { ...

16得票2回答
`foldl`的实际应用

今天我在编写一个小脚本时,我使用了foldl而不是foldl'。结果我遭受了stack overflow,所以我导入了Data.List (foldl')并对此感到高兴。这就是我使用foldl的默认工作流程。当惰性版本无法求值时,只需使用foldl'。 Real World Haskell认...

16得票4回答
为什么Haskell的foldr不会发生堆栈溢出,而相同的Scala实现会呢?

我正在阅读Scala函数式编程。 第3.10题说foldRight会溢出(参见下面的图片)。 就我所知,然而,在Haskell中foldr不会。 http://www.haskell.org/haskellwiki/-- if the list is empty, the result ...

15得票2回答
由于“fold”不足以编写带缩进的树形打印机,那么什么高阶组合器可以使用?

假设有下面这个树的数据类型:data Tree a = Node [Tree a] | Leaf a deriving Show type Sexp = Tree String 我该如何使用高阶组合器表达一个“漂亮”的函数,使其能够以正确的缩进打印树形结构?例如:sexp = Nod...

15得票3回答
如何在Haskell中使用foldr实现删除

我已经学习了几天的折叠函数。我可以使用简单的函数,例如length,concat和filter。我遇到的问题是尝试使用foldr实现delete,take和find等函数。我已经使用显式递归来实现了这些函数,但我不知道如何将这些类型的函数转换为右折叠。 我已经研究了Graham Hutton...

15得票5回答
请用最简单、不带专业术语的英语解释“fold的通用属性”是什么?

我正在阅读《Real World Haskell》,其中提到了一个免费的PDF文件"A tutorial on the universality and expressiveness of fold"。该文指出,“fold”是“通用”的。我对他对“通用”的定义感到困惑,希望听听那些已经花时间消...