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

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

14得票2回答
为什么将Nil传递给foldLeft不起作用?

使用foldLeft构建列表时,我经常会因为需要显式地输入注入参数而感到烦恼,希望能够直接使用`Nil' - 这里是一个人为的例子:scala> List(1,2,3).foldLeft(List[Int]())((x,y) => y :: x) res17: List[Int]...

8得票1回答
在Scala中,scan和scanLeft有什么区别?

“scan”和“scanLeft”有什么区别? 例如, (1 to 3).scan(10)(_-_) res: Vector(10, 9, 7, 4) (1 to 3).scanLeft(10)(_-_) res: Vector(10, 9, 7, 4) 传递相同的结果,与之形成鲜明...

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

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

23得票3回答
有没有看起来不像容器的非平凡可折叠或可遍历实例?

有很多像容器(列表、序列、映射等)的函数子,还有许多不是容器的(状态转换器、IO、解析器等)。我还没有看到过任何不像容器的非平凡的Foldable或Traversable实例(至少如果你眯一下眼睛的话)。是否存在任何不是容器的实例?如果没有,我想更好地理解它们不能存在的原因。

10得票4回答
使用continuations可以使foldRight成为尾递归吗?

以下博客文章展示了如何在F#中使用continuation passing style使foldBack成为尾递归。 在Scala中,这意味着: def foldBack[T,U](l: List[T], acc: U)(f: (T, U) => U): U = { l matc...

8得票2回答
Haskell中,二叉树的foldl/foldr实现来自于Foldable接口吗?

我正在学习《Learn You a Haskell》,目前在学习关于单子的部分。在这一部分中,作者定义了树的foldMap方法: instance F.Foldable Tree where foldMap f Empty = mempty foldMap f (No...

7得票2回答
无限列表折叠时出现堆栈溢出?

考虑以下函数: (<.>) :: [[a]] -> [[a]] -> [[a]] xs <.> ys = zipWith (++) xs ys 这个操作实际上是将两个二维的 a 数组左右拼接在一起,例如: [[1,2],[3,4]] <.&gt...

10得票2回答
Java 8中类似于Haskell的foldr函数的等价实现

我们在Haskell中习惯使用foldr,其中你可以(例如使用Java语法)将一个List<T>作为输入,返回任何类型的值(如<T>,List<T>等)。 例如,在Haskell中,以下函数接受一个List<Integer>并返回另一个List...

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

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