问题标签 [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 投票
3 回答
2711 浏览

vim - 当文件中有折叠时,gvim 自动显示折叠列

我知道你可以使用

启用折叠列

但是有没有办法仅在文件中存在折叠时自动打开它?

0 投票
4 回答
9685 浏览

recursion - 为什么在 Racket 中以一种奇怪的方式定义 foldl?

在 Haskell 中,就像在许多其他函数式语言中一样,函数foldl被定义为,例如,foldl (-) 0 [1,2,3,4] = -10.

这没关系,因为foldl (-) 0 [1, 2,3,4]根据定义,((((0 - 1) - 2) - 3) - 4).

但是,在 Racket 中,(foldl - 0 '(1 2 3 4))是 2,因为 Racket “智能地”计算如下:(4 - (3 - (2 - (1 - 0)))),这确实是 2。

当然,如果我们定义辅助函数flip,像这样:

那么我们可以在 Racket 中实现与在 Haskell 中相同的行为:而不是(foldl - 0 '(1 2 3 4))我们可以编写:(foldl (flip -) 0 '(1 2 3 4))

问题是:为什么foldl在球拍中以如此奇怪(非标准和非直观)的方式定义,与任何其他语言不同?

0 投票
5 回答
672 浏览

f# - F# '+' 运算符重载和 List.fold

我正在尝试在为 定义运算符重载的记录类型上使用 List.fold +,但是在尝试将(+)运算符用作传递给 fold 的 lambda 时出现类型不匹配错误。这是一个简化的片段,可以说明我的问题:

+载工作得很好

但是说我有一个人名单:

我不能使用 List.fold 来总结所有年龄:

我猜问题是 F# 无法识别+以这种方式传递时的重载,因为 fold 隐式键入列表,int因为我使用 '0' 作为累加器。我不确定是否有可能让我的自定义运算符重载正常工作,如果可能的话,我缺少什么来实现它。(我假设可以使这项工作成为可能,因为您可以+在花车上使用)。

编辑

我知道问题是类型不匹配。正如 JaredPar 所写,我知道我可以编写一个 lambda 来获取两个人的记录并添加年龄。那不是我的意思。问题是,在我看来,应该有一种方法可以让+我已经写过的运算符重载被 fold 确认为有效的重载。

另一个编辑

感谢大家的意见。越来越清楚的一件事是,不可能做我想做的事,但这没关系。我学到了一些东西!我所看到的是,运算符重载的分辨率使得它们不能在每个上下文中工作——所以fold没有无缝的方法可以让+作为 lambda 传递的工作就像用作中缀 ala 时那样工作jen + kevin。为什么这不起作用是完全有道理的。人们建议解决这个问题的解决方案基本上是一次性处理特定问题的fold——我真正追求的是如何获得正确的运算符重载以在每种情况下都被选中(即foldback等)——我不想写一堆特殊情况的代码来处理列表。很明显,F# 的运算符重载解决方案有一些限制,使其工作到肤浅的水平,这很好。

0 投票
1 回答
2721 浏览

haskell - Haskell 有 foldlM' 吗?

一个人如何严格地折叠一个单子? Data.Foldable有严格foldl'的和一元的foldlM,但没有严格的foldlM'?单子本身是否以某种方式定义了严格性?如果是这样,如何确定它是什么?

想象一下,我必须确定大量环元素的乘积是否为零,但我的环不是整数域,即它包含零除数。在这种情况下,我应该递归地foldl将我的乘法***拖到列表上,但False在乘积变为零的那一刻返回,而不是等待完整的乘积。

我也许可以使用Maybemonad稍微简化此代码,foldlM但这样做似乎缺乏所需的严格性。

0 投票
4 回答
42764 浏览

f# - 折叠和减少的区别?

尝试学习 F#,但在尝试区分foldreduce时感到困惑。折叠似乎做同样的事情,但需要一个额外的参数。这两个功能的存在是否有正当理由,或者它们的存在是为了容纳不同背景的人?(例如:C# 中的字符串和字符串)

这是从示例中复制的代码片段:

0 投票
4 回答
2826 浏览

perl - Perl 中有 zip 和 fold 之类的功能吗?

我想在 perl中使用一些功能,例如“zip”“fold”“map” 。(就像在 Haskell 中一样。)我找到了 map 并且效果很好。那么,有拉链和折叠吗?非常感谢你。

0 投票
5 回答
1752 浏览

scala - 建议在多个值上优化简单的 Scala foldLeft?

我正在从 Java 到 Scala 重新实现一些代码(一个简单的贝叶斯推理算法,但这并不重要)。我想以尽可能高性能的方式实现它,同时通过尽可能避免可变性来保持代码的清洁和功能。

以下是 Java 代码片段:

很简单,对吧?所以我决定第一次尝试使用 Scala foldLeft 和 map 方法。因为我有两个值要累积,所以累加器是一个元组:

不幸的是,这段代码的执行速度比 Java 慢了大约 5 倍(使用简单且不精确的度量;只是在循环中调用了 10000 次代码)。一个缺陷非常明显;我们遍历列表两次,一次在 map 调用中,另一次在 foldLeft 中。所以这是一个遍历列表一次的版本。

这个更好!它的性能比 Java 代码差大约 3 倍。我的下一个预感是,在折叠的每个步骤中创建所有新元组可能都会涉及一些成本。所以我决定尝试一个遍历列表两次但不创建元组的版本。

这与以前的版本大致相同(比 Java 版本慢 3 倍)。并不奇怪,但我充满希望。

所以我的问题是,有没有更快的方法在 Scala 中实现这个 Java 代码片段,同时保持 Scala 代码干净,避免不必要的可变性并遵循 Scala 习语?我确实希望最终在并发环境中使用此代码,因此保持不变性的价值可能超过单线程中较慢的性能。

0 投票
4 回答
5917 浏览

haskell - 树折叠操作?

我在 Haskell 上一门课,我们需要为定义的树定义折叠操作:

我似乎找不到任何关于“tfold”操作的信息或它应该做什么。任何帮助将不胜感激。

0 投票
1 回答
2131 浏览

list - Haskell,将函数应用于列表中的每个项目

嘿还有另一个haskell问题我有一个f类型的函数 :: CSP -> 赋值 -> Var -> Int -> CSP

我想用类型写一个函数

g :: CSP -> 赋值 -> Var -> [Int] -> CSP

它将原始函数应用于列表中的所有元素[Int]。它传递的CSP应该在每次f应用时更新,Assigment将与Var. 我很确定我需要使用折叠,但我真的不明白它们。如果有人可以帮助我并尝试解释折叠,我将非常感激。

0 投票
1 回答
549 浏览

python - Haskell 的 foldi/foldt 是否存在于 Python 中?

我知道与 Haskell 的 foldl 等效的 python reduce,但我找不到与 Haskell 的 foldi/foldt Link_to_haskell_fold_examples类似的东西