问题标签 [fold]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
1461 浏览

f# - F# 折叠三元组中的序列

我已经用谷歌搜索并阅读了,并且正在尝试找到一种“正确”的方法来做到这一点,但是我在 SO 上阅读的每个问题似乎都有完全不同的答案。

这是我的问题的要点。文件具有三元组序列的类型签名(a:string,b:string,c:Int64)。作为 f# 的新手,我仍然不能流利地表达类型签名(或者就此而言理解它们)。a 是文件名,b 是内部标识符,c 是表示文件长度(大小)的值。baseconfig 是代码前面的字符串。

这段代码应该做的是遍历 中的每个文件files,将其添加到 zip 存档中(但不是真的,它只是在稍后提交的列表中),当文件超过 50MB 时,提交当前待处理的文件到 zip 存档。添加文件很便宜,提交很昂贵,所以我尝试通过批处理来降低成本。

到目前为止,代码有点工作......除了当它接近 150MB 的提交文件时我得到的 ObjectDisposedException。但我不确定这是进行此类操作的正确方法。感觉就像我正在Seq.fold以非常规的方式使用,但是,我不知道有更好的方法来做到这一点。

额外的问题:有没有更好的方法从元组中剔除值?fst 和 snd 仅适用于 2 值元组,我意识到您可以定义自己的函数,而不是像我那样内联它们,但似乎应该有更好的方法。

更新:我之前的折叠尝试,我不明白为什么我不能只使用 Int64 作为累加器。原来我错过了一些关键的括号。下面是更简单的版本。也消除了所有疯狂的元组提取。

更新 2:我将不得不采用命令式解决方案,F# 以某种方式重新输入此代码块,在 zip 文件在其后的语句中关闭之后。这解释了 ObjectDisposedException。不知道这是如何工作的或为什么。

0 投票
8 回答
37414 浏览

haskell - 您将如何在 Haskell 中使用 foldr 定义映射和过滤器?

我正在对函数式语言(目前使用 Haskell)进行一些自学。我遇到了一个基于 Haskell 的任务,它需要根据 foldr 定义映射和过滤器。对于我的一生,我并不完全理解如何去做。

例如,当我定义一个地图函数时:

我不知道为什么列表的第一个元素总是被忽略。意思是:

结果 [4,6,8] 而不是 [2,4,6,8]

同样,我的过滤器功能:

当运行为:

结果 [4,6] 而不是 [2,4,6]

为什么会这样?我应该如何定义这些函数以获得预期的结果?我假设我的 lambda 表达式有问题...

0 投票
2 回答
10668 浏览

functional-programming - 如何在有条件的列表上进行添加?

我有一门关于函数式编程的大学课程,我在其中使用 SML。作为考试的准备工作,我正在研究一些没有解决方案的旧考试集。

我真正遇到的唯一问题之一是使用以下问题foldl

考虑程序框架: fun addGt k xs = List.foldl (...) ... xs; 将缺失的两个部分补上(用点...表示),使得 addGt k xs 是 xs 中大于 k 的那些元素的总和。例如,addGt 4 [1, 5, 2, 7, 4, 8] = 5 + 7 + 8 = 20

我确信这真的很容易,但我很难理解 foldl 和 foldr 函数。

我现在拥有的是以下内容(如果您问我的编译器,这似乎是非常错误的!):

我真的很感激这个问题的一些帮助,也许是一个非常简短的评论,可以对foldlandfoldr功能有所了解!

0 投票
4 回答
1556 浏览

haskell - 无法在文件夹中执行 I/O?

我有一个将 sData.Map映射StringStringss 的结构。无论出于何种原因,我想key: value使用格式打印地图的内容foldrWithKey,如下所示:

但是,只有地图的第一个元素出现在输出中(即使地图有多个元素)。但是当我尝试使用foldrWithKey然后打印它来构造一个列表时,所有的元素都会显示出来:

那么,为什么在尝试执行 I/O 时其他元素没有出现?是 foldr 的工作方式还是我遗漏了一些与惰性 io 相关的微妙怪癖?

0 投票
5 回答
837 浏览

haskell - foldl / foldr 查询

我是 Haskell 的初学者,即使在阅读了几个对 foldr/foldl 的解释之后,我也无法理解为什么我会在下面得到不同的结果。解释是什么?

谢谢!

0 投票
9 回答
16322 浏览

haskell - 使用 foldr 编写 foldl

真实世界的 Haskell中,第 4 章关于函数式编程

用 foldr 编写 foldl:

上面的代码让我很困惑,有人叫dps把它改写了一个有意义的名字,让它更清楚一点:

其他人,Jef G,然后通过提供示例并逐步展示底层机制做得非常出色:

但我仍然无法完全理解,这是我的问题:

  1. id 函数有什么用?有什么作用?为什么我们在这里需要它?
  2. 在上面的例子中,id 函数是 lambda 函数中的累加器吗?
  3. foldr 的原型是foldr :: (a -> b -> b) -> b -> [a] -> b,第一个参数是一个需要两个参数的函数,但是 myFoldl 的实现中的 step 函数使用了 3 个参数,我完全糊涂了!
0 投票
8 回答
34409 浏览

list - 使用 Haskell 的 map 函数计算列表的总和

哈斯克尔

我能够使用函数获得列表的总和,sum但是是否可以使用函数获得列表的总和map?还有map函数有什么用?

0 投票
2 回答
171 浏览

list - 从 [1..] 的地图中排除计算结果?

我目前正在开发一个计算友好对的程序(Project Euler Problem 21)。我已经找到了解决方案,但是我注意到我的程序中的一个缺陷是它评估了集合 [1..] 的所有数字,无论我们是否已经找到该数字是一对。

即,如果当前评估 220 和 284 被发现是它的对,但是当 map 函数到达 284 时继续它不应该再次评估它。

举个例子:

返回:

我对 Haskell 和函数式编程还很陌生,所以如果它是一个明显的解决方案,请原谅我。

0 投票
7 回答
27287 浏览

scala - fold 和 foldLeft 或 foldRight 之间的区别?

注意:我使用的是 Scala 2.8——这会是个问题吗?

为什么我不能以与orfold相同的方式使用该功能?foldLeftfoldRight

Set scaladoc 中它说:

折叠的结果可能只是这个并行集合的类型参数的超类型T

T但我在函数签名中看不到类型参数:

foldLeft-Right和之间有什么区别fold,如何使用后者?

编辑:例如,我将如何编写折叠以添加列表中的所有元素?有了foldLeft它:

0 投票
3 回答
1621 浏览

javascript - 如何对jQuery中选择器返回的值进行折叠?

假设我有一些 HTML 元素:

我通过以下方式选择的内容:

如何对元素进行“foldl”操作(迭代、累积结果),例如使用换行符加入它们?