问题标签 [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 回答
24801 浏览

language-agnostic - 你怎么知道什么时候使用 fold-left 和什么时候使用 fold-right?

我知道向左折叠会产生向左倾斜的树,向右折叠会产生向右倾斜的树,但是当我伸手去折叠时,我有时会发现自己陷入了令人头痛的想法,试图确定哪种折叠是合适的。我通常最终会展开整个问题并逐步执行折叠功能,因为它适用于我的问题。

所以我想知道的是:

  • 确定是向左折叠还是向右折叠有哪些经验法则?
  • 鉴于我面临的问题,我如何快速决定使用哪种类型的折叠?

Scala by Example (PDF) 中有一个示例,它使用折叠来编写一个名为 flatten 的函数,该函数将元素列表的列表连接成一个列表。在这种情况下,正确的折叠是正确的选择(考虑到列表的连接方式),但我不得不考虑一下才能得出这个结论。

由于折叠是(函数式)编程中如此常见的动作,我希望能够快速而自信地做出这些决定。所以……有什么建议吗?

0 投票
5 回答
269 浏览

c++ - 在 C++ 类中折叠断言?

所以,在非类的情况下,我可以做这样的事情:

如果改为val_to_check声明const,则编译器可以折叠该断言。

我很好奇是否可以使用类的成员变量获得类似的常量折叠。例如,我可以执行以下操作:

所以在定义类时必须知道 val_,a-la:

(我知道这些都是人为的例子)。似乎有时应该可以将断言折叠起来,但我测试过的简单示例似乎并没有这样做。我得到的最好的是将断言代码移动到函数的末尾(使用 -O3 编译时)

0 投票
2 回答
1220 浏览

lisp - 普通lisp的“展开”?

我从 SICP 学到了很多方案,但现在对 common lisp 更感兴趣。我知道常见的 lispfoldreduce,带有左或右折叠的特殊参数,但相当于unfold什么?谷歌搜索没有多大帮助。事实上我得到的印象是没有展开???

0 投票
11 回答
89041 浏览

haskell - 文件夹如何工作?

任何人都可以解释它是如何foldr工作的吗?

举这些例子:

我对这些处决感到困惑。有什么建议么?

0 投票
6 回答
7998 浏览

vim - 代码折叠没有保存在我的 vimrc 中

我将以下代码添加到我的 .vimrc 中:

HTML 和 CSS 文档保存和恢复它们的折叠,但代码折叠没有保存在我的.vimrc中

有什么建议么?

编辑:

下面的代码解决了这个问题:

但是如果我写了它,MRU 文件就会从我的列表中消失(我必须打开 MRU 两次才能看到我最近的文件列表,为什么?)

0 投票
4 回答
4559 浏览

vim - 你最喜欢在 Vim 中用于 HTML、Javascript 和 CSS 的折叠方法(或秘密技术)是什么?

我使用这样的东西:1,40 fo但我认为这不是最有效的方法。

你的是啥呢?

0 投票
3 回答
650 浏览

haskell - 我是否使用合理的等式推理来根据 foldr 定义过滤器?

好吧,这是使用 foldr 的过滤器函数的定义:

例如,假设我有这个功能:

所以它将是:

这将是

这将是

这将是

这将是

foldr step [] []是这样的[]

现在我们将真正进入step函数。
这是函数step内部的定义myFilter,从上面:

另外,我提醒您这p实际上是odd我们示例中的功能。

好吧,我们又来了:

x = 4在最里面step4并不奇怪,所以我们返回ys,即[]

所以现在我们得到了这个:

现在,在最内在stepx = 3, 和3是奇数,所以我们返回x:ys,即3 : [],即[3],现在我们得到:

现在,在内部step,x = 22不是奇数,所以我们返回ys,即[3],所以现在我们将得到:

现在,x = 11是奇数,所以我们返回x : ys,即1 : [3],即[1,3]

结束 :-)。

我的所有动作都正确吗?
多谢 :-)。

ps 的定义myFilter来自《Real World Haskell 》一书第 4 章。

0 投票
2 回答
651 浏览

vim - 如何使用 Vim 语法文件将单行注释折叠到一个区域中?

我正在整理用于编辑 Java Manifest 文件的语法(在 github 上,如果有人感兴趣的话)。我正在尝试折叠多个单行注释(我目前正在与 匹配syntax match manifestComment "#.*")。但是,如果我尝试使用语法区域,那么整个文件都会被标记,整个事情就会崩溃。

我想要实现的是:

并让它崩溃成:

问题是没有明显的“结束”字符,折叠语法也无济于事;所以我做不到syntax region commentBlock start="^#" end="^[^#]"。粗略地说,语法区域应该从第一个散列字符开始,然后继续向下行,直到找到不以散列开头的行。

0 投票
3 回答
48365 浏览

scala - 函数式编程、Scala 映射和左折叠

有哪些关于左折叠的好教程?

原始问题,从删除中恢复以提供其他答案的上下文:

我正在尝试实现一种方法来查找矩形、圆形、位置和所有扩展形状的组的边界框。Group 基本上是一个 Shapes 数组

除了第一组之外,我计算了所有三个的边界框。所以现在对于边界框方法,我知道我应该为 Group 使用 map 和 fold left,但我只是找不到创建它的确切语法。

组边界框基本上是包含所有形状的最小边界框。

0 投票
2 回答
532 浏览

haskell - 如何在 Haskell 中编写 foldr HOF

我想在我的元组中添加一些金额。我想把它拿出来,汇总并展示。我想使用 Foldr 功能。

有人可以帮我看看怎么做