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

mercurial - Mercurial——获取存储库中的所有文件,包括子存储库,但不获取存储库本身

这可能吗?

对我想要做的事情做一个简单的解释:

我有一个带有子存储库“B”的存储库“A”。我有这对的两份。

在一个副本(我们称之为小副本)中,“A”具有变更集 A1-A5,“B”具有变更集 B1-B20。

在另一个(大)副本中,“A”具有变更集 A1-A10,“B”具有变更集 B1-B30。

我想要做的是从大仓库中获取所有文件并将它们作为变更集 A6 和 B21 提交给小仓库。然后我会将它推送到服务器。(服务器上不存在大存储库,因此这不会产生任何冲突。)。

这方面的工具似乎确实存在——例如,请参见此处。问题是我不知道任何建议的方法是否与子存储库配合得很好。

0 投票
2 回答
1253 浏览

map - 为什么 Map.make.fold 更像 List.fold_right (非尾递归)?

关于 Ocaml 折叠的问题:您能解释一下为什么 Map.make.fold 的设计更像 List.fold_right 而不是 List.fold_left,请注意 List。fold_right 不是tail_recursive?应该有 Map.make.fold_left 和 Map.make.fold_right ?

0 投票
2 回答
2202 浏览

api - 为什么 fold 在 Scala 中具有以下类型?

我正在查看为 immutable.Set 定义折叠的方式:

然而 foldLeft 被定义为:

这对我来说看起来很奇怪,至少乍一看,因为我希望 fold 能够更改它返回的集合的类型,就像 foldLeft 一样。

我想这是因为 foldLeft 和 foldRight 保证了元素折叠的顺序。fold 给的保证是什么?

0 投票
6 回答
26459 浏览

html - 如何使用 Vim 折叠/展开 HTML 标签

是否有一些插件可以在 Vim 中折叠 HTML 标签?
或者还有另一种方法来设置折叠或展开 html 标签的快捷方式?
我想像缩进折叠一样折叠/展开 html 标签。

0 投票
3 回答
3307 浏览

scala - Scala 向量折叠语法(/: and :\ and /:\)

有人可以提供一些例子来说明如何

/: :\/:\

真的习惯了吗?我认为它们是 reduce / fold 方法的快捷方式,但没有关于它们如何在 Scala 文档中实际使用的示例,并且无法在 StackOverflow 上搜索 / 搜索它们。

0 投票
2 回答
9040 浏览

recursion - 使用 fold_left/right 反转 OCaml 中的列表

更新 - 解决方案

感谢 jacobm 的帮助,我想出了一个解决方案。


我正在学习 OCaml(用于类)中的不同递归方式,并且为了一些练习,我正在编写一个函数来使用不同的递归样式来反转列表。

现在,我正在尝试编写一个反向函数,List.fold_left但我被卡住了,无法弄清楚。我将如何使用折叠来编写这个反向函数?

此外,如果有人对函数式编程、不同类型的递归、高阶函数等有很好的参考,将不胜感激链接:)

0 投票
5 回答
7963 浏览

list - 无限列表的左右折叠

我对Learn You A Haskell中的以下段落有疑问(很棒的书 imo,而不是 dissing):

一个很大的区别是右折叠适用于无限列表,而左折叠则不行!说白了,如果你在某个点取一个无限列表,然后从右边折叠它,你最终会到达列表的开头。但是,如果您在某个点上取出一个无限列表并尝试从左侧折叠它,您将永远不会到达终点!

我就是不明白。如果您获取一个无限列表并尝试从右侧折叠它,那么您将不得不从无穷大的点开始,这不会发生(如果有人知道您可以这样做的语言,请告诉:p )。至少,您必须根据 Haskell 的实现从那里开始,因为在 Haskell 中, foldr 和 foldl 不采用决定它们应该在列表中的哪个位置开始折叠的参数。

我同意报价 iff foldr 和 foldl 采用的参数决定了它们应该在列表中的哪个位置开始折叠,因为如果您采用无限列表并从定义的索引开始折叠,它最终终止,而它不会不管你从哪里开始左弃牌;你将向无穷大折叠。然而 foldr 和 foldl接受这个论点,因此引用没有意义。在 Haskell 中,无限列表上的左折叠和右折叠都不会终止

我的理解是正确的还是我遗漏了什么?

0 投票
1 回答
1563 浏览

functional-programming - 在 OCaml 中“突破”?

我有一个使用 List.fold_left2 来检查列表是否为回文的函数。(折叠的使用不是可选的:这是一个家庭作业问题。)

但我想优化它。一旦发现一个不匹配,返回“假”的最佳方法是什么?

我宁愿不抛出异常,但我意识到这可能是最好的答案。我还考虑将匿名函数更改为:

0 投票
4 回答
2895 浏览

haskell - foldl 是如何偷懒的?

在 Haskell 中 有很多关于、和的好问题和答案。foldlfoldrfoldl'

所以现在我知道:
1)foldl很懒
2)不要使用foldl,因为它会炸毁堆栈
3)使用foldl',因为它很严格(ish

如何foldl评估:
1)创建了一大堆 thunk
2)在 Haskell 完成创建 thunk 后,thunk 减少了
3)如果有太多 thunk 则溢出堆栈

我感到困惑的是:
1)为什么在所有重击之后必须发生减少?
2)为什么不foldl评估就像foldl'?这只是实现的副作用吗?
3) 从定义来看,foldl它看起来可以使用尾递归来有效地评估——我如何判断一个函数是否真的会被有效地评估?如果我不想让我的程序崩溃,我似乎不得不开始担心 Haskell 中的评估顺序。

提前致谢。我不知道我对评估的理解foldl是否正确-如有必要,请提出更正。


更新:看来我的问题的答案与范式、弱范式和头部范式以及 Haskell 对它们的实现有关。
但是,我仍在寻找一个示例,其中更急切地评估组合函数会导致不同的结果(崩溃或不必要的评估)。

0 投票
4 回答
2454 浏览

scala - 如何折叠左边的 BigDecimal 列表?(“重载方法+无法应用”)

我想为 BigDecimal 列表编写一个简短的函数求和函数,并尝试使用:

但我收到了这个错误信息:

如果我改用 Int,则该函数有效。我猜这是因为 BigDecimal 的运算符重载了+. BigDecimal 有什么好的解决方法?