7得票4回答
无限列表在Haskell中与fold*结合使用无法计算。

假设我想获得一个按顺序排列的无限列表,其中包含所有指数小于n的质数幂。 我有一个函数可以合并两个已排序的列表,还有一个能给出质数的函数。 merge :: Ord t => [t] -> [t] -> [t] merge (x:xs) (y:ys) | (x &l...

8得票1回答
Haskell与Erlang:foldl函数的区别?

我注意到在使用foldl时,Haskell和Erlang有所不同。 对于foldr,两种语言返回的结果是相同的: foldr (\x y -> 2*x+y) 4 [1, 2, 3] -- returns 49 lists:foldr(fun(X, Y) −> X+2∗Y end...

49得票4回答
为什么Racket中的foldl定义方式很奇怪?

在Haskell中,和许多其他函数式编程语言一样,函数foldl被定义为这样用法:foldl (-) 0 [1,2,3,4] = -10。这是因为根据定义,foldl (-) 0 [1, 2,3,4]等于((((0 - 1) - 2) - 3) - 4)。 但在Racket中,(foldl ...

8得票2回答
在F#中对多路树进行折叠/递归

我是一名有用的助手,可以为您翻译文本。 我正在尝试将Brian的二叉树折叠(http://lorgonblog.wordpress.com/2008/04/06/catamorphisms-part-two/)适应于多路树。 总结自Brian的博客: 数据结构: type Tree&l...

10得票2回答
Clojure中的reducers是否解决了Guy Steele提出的可伸缩foldr累积问题?

在她的演讲中The Future Of Clojure,Bodil提出了以下观点: 引用: Guy Steele在ICFP上发表了题为Organizing Functional Code for Parallel Execution (or, foldl and foldr Consider...

7得票2回答
折叠和堆栈溢出问题解答

Learn You a Haskell讲述了foldl'作为foldl的一种替代方案,因为foldl容易出现堆栈溢出的情况。 根据LYAH的说法,foldl (+) 0 (replicate 1000000 1)应该会导致堆栈溢出,但在我的机器上并没有。即使我将数字增加到1000万,它也不...

22得票7回答
使用foldr实现zip

我目前正在阅读《Real World Haskell》第4章,并试图理解如何用foldr实现foldl。 (这是他们的代码:)myFoldl :: (a -> b -> a) -> a -> [b] -> a myFoldl f z xs = foldr st...

19得票5回答
Python中的reduce函数用于找到集合的并集。

我正在尝试找到一组集合的并集。具体来说,我想要字典 periodic_gs 中每个键对应的 networkx 图中节点列表的并集。我希望使用 reduce 函数,因为它似乎可以合理地将所有 periodic_gs[x].nodes()(其中 x 是 periodic_gs 的键)的并集进行聚合...

73得票5回答
在一个无限列表上进行左折叠和右折叠

我对Learn You A Haskell的以下段落有疑问(我认为这是一本很好的书,不是在贬低它): 其中一个重要的区别是右折叠可以处理无限列表,而左折叠不行!简单地说,如果你从右边开始对一个无限列表进行折叠,最终会到达列表的开头。然而,如果你从左边开始对一个无限列表进行折叠,你永远也无法到...

8得票2回答
轻松破解foldl的方法

我需要从foldl中退出。这里是一个虚拟的例子,演示如何在计算列表中值的总和并遇到太大的值(即10)时从fold中退出。 L = [1,2,3,4,10,5,6,7], Res = try lists:foldl( fun...