问题标签 [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.
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。不知道这是如何工作的或为什么。
haskell - 您将如何在 Haskell 中使用 foldr 定义映射和过滤器?
我正在对函数式语言(目前使用 Haskell)进行一些自学。我遇到了一个基于 Haskell 的任务,它需要根据 foldr 定义映射和过滤器。对于我的一生,我并不完全理解如何去做。
例如,当我定义一个地图函数时:
我不知道为什么列表的第一个元素总是被忽略。意思是:
结果 [4,6,8] 而不是 [2,4,6,8]
同样,我的过滤器功能:
当运行为:
结果 [4,6] 而不是 [2,4,6]
为什么会这样?我应该如何定义这些函数以获得预期的结果?我假设我的 lambda 表达式有问题...
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 函数。
我现在拥有的是以下内容(如果您问我的编译器,这似乎是非常错误的!):
我真的很感激这个问题的一些帮助,也许是一个非常简短的评论,可以对foldl
andfoldr
功能有所了解!
haskell - 无法在文件夹中执行 I/O?
我有一个将 sData.Map
映射String
到Strings
s 的结构。无论出于何种原因,我想key: value
使用格式打印地图的内容foldrWithKey
,如下所示:
但是,只有地图的第一个元素出现在输出中(即使地图有多个元素)。但是当我尝试使用foldrWithKey
然后打印它来构造一个列表时,所有的元素都会显示出来:
那么,为什么在尝试执行 I/O 时其他元素没有出现?是 foldr 的工作方式还是我遗漏了一些与惰性 io 相关的微妙怪癖?
haskell - foldl / foldr 查询
我是 Haskell 的初学者,即使在阅读了几个对 foldr/foldl 的解释之后,我也无法理解为什么我会在下面得到不同的结果。解释是什么?
谢谢!
haskell - 使用 foldr 编写 foldl
在真实世界的 Haskell中,第 4 章关于函数式编程:
用 foldr 编写 foldl:
上面的代码让我很困惑,有人叫dps把它改写了一个有意义的名字,让它更清楚一点:
其他人,Jef G,然后通过提供示例并逐步展示底层机制做得非常出色:
但我仍然无法完全理解,这是我的问题:
- id 函数有什么用?有什么作用?为什么我们在这里需要它?
- 在上面的例子中,id 函数是 lambda 函数中的累加器吗?
- foldr 的原型是
foldr :: (a -> b -> b) -> b -> [a] -> b
,第一个参数是一个需要两个参数的函数,但是 myFoldl 的实现中的 step 函数使用了 3 个参数,我完全糊涂了!
list - 使用 Haskell 的 map 函数计算列表的总和
哈斯克尔
我能够使用函数获得列表的总和,sum
但是是否可以使用函数获得列表的总和map
?还有map函数有什么用?
list - 从 [1..] 的地图中排除计算结果?
我目前正在开发一个计算友好对的程序(Project Euler Problem 21)。我已经找到了解决方案,但是我注意到我的程序中的一个缺陷是它评估了集合 [1..] 的所有数字,无论我们是否已经找到该数字是一对。
即,如果当前评估 220 和 284 被发现是它的对,但是当 map 函数到达 284 时继续它不应该再次评估它。
举个例子:
返回:
我对 Haskell 和函数式编程还很陌生,所以如果它是一个明显的解决方案,请原谅我。
scala - fold 和 foldLeft 或 foldRight 之间的区别?
注意:我使用的是 Scala 2.8——这会是个问题吗?
为什么我不能以与orfold
相同的方式使用该功能?foldLeft
foldRight
在Set scaladoc 中它说:
折叠的结果可能只是这个并行集合的类型参数的超类型
T
。
T
但我在函数签名中看不到类型参数:
foldLeft-Right
和之间有什么区别fold
,如何使用后者?
编辑:例如,我将如何编写折叠以添加列表中的所有元素?有了foldLeft
它:
javascript - 如何对jQuery中选择器返回的值进行折叠?
假设我有一些 HTML 元素:
我通过以下方式选择的内容:
如何对元素进行“foldl”操作(迭代、累积结果),例如使用换行符加入它们?