问题标签 [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.
language-agnostic - 你怎么知道什么时候使用 fold-left 和什么时候使用 fold-right?
我知道向左折叠会产生向左倾斜的树,向右折叠会产生向右倾斜的树,但是当我伸手去折叠时,我有时会发现自己陷入了令人头痛的想法,试图确定哪种折叠是合适的。我通常最终会展开整个问题并逐步执行折叠功能,因为它适用于我的问题。
所以我想知道的是:
- 确定是向左折叠还是向右折叠有哪些经验法则?
- 鉴于我面临的问题,我如何快速决定使用哪种类型的折叠?
在Scala by Example (PDF) 中有一个示例,它使用折叠来编写一个名为 flatten 的函数,该函数将元素列表的列表连接成一个列表。在这种情况下,正确的折叠是正确的选择(考虑到列表的连接方式),但我不得不考虑一下才能得出这个结论。
由于折叠是(函数式)编程中如此常见的动作,我希望能够快速而自信地做出这些决定。所以……有什么建议吗?
c++ - 在 C++ 类中折叠断言?
所以,在非类的情况下,我可以做这样的事情:
如果改为val_to_check
声明const
,则编译器可以折叠该断言。
我很好奇是否可以使用类的成员变量获得类似的常量折叠。例如,我可以执行以下操作:
所以在定义类时必须知道 val_,a-la:
(我知道这些都是人为的例子)。似乎有时应该可以将断言折叠起来,但我测试过的简单示例似乎并没有这样做。我得到的最好的是将断言代码移动到函数的末尾(使用 -O3 编译时)
lisp - 普通lisp的“展开”?
我从 SICP 学到了很多方案,但现在对 common lisp 更感兴趣。我知道常见的 lispfold
是reduce
,带有左或右折叠的特殊参数,但相当于unfold
什么?谷歌搜索没有多大帮助。事实上我得到的印象是没有展开???
vim - 代码折叠没有保存在我的 vimrc 中
我将以下代码添加到我的 .vimrc 中:
HTML 和 CSS 文档保存和恢复它们的折叠,但代码折叠没有保存在我的.vimrc中
有什么建议么?
编辑:
下面的代码解决了这个问题:
但是如果我写了它,MRU 文件就会从我的列表中消失(我必须打开 MRU 两次才能看到我最近的文件列表,为什么?)
vim - 你最喜欢在 Vim 中用于 HTML、Javascript 和 CSS 的折叠方法(或秘密技术)是什么?
我使用这样的东西:1,40 fo
但我认为这不是最有效的方法。
你的是啥呢?
haskell - 我是否使用合理的等式推理来根据 foldr 定义过滤器?
好吧,这是使用 foldr 的过滤器函数的定义:
例如,假设我有这个功能:
所以它将是:
这将是
这将是
这将是
这将是
foldr step [] []
是这样的[]
:
现在我们将真正进入step
函数。
这是函数step
内部的定义myFilter
,从上面:
另外,我提醒您这p
实际上是odd
我们示例中的功能。
好吧,我们又来了:
和
x = 4
在最里面step
,4
并不奇怪,所以我们返回ys
,即[]
所以现在我们得到了这个:
现在,在最内在step
的x = 3
, 和3
是奇数,所以我们返回x:ys
,即3 : []
,即[3]
,现在我们得到:
现在,在内部step
,x = 2
和2
不是奇数,所以我们返回ys
,即[3]
,所以现在我们将得到:
现在,x = 1
和1
是奇数,所以我们返回x : ys
,即1 : [3]
,即[1,3]
。
结束 :-)。
我的所有动作都正确吗?
多谢 :-)。
ps 的定义myFilter
来自《Real World Haskell 》一书第 4 章。
vim - 如何使用 Vim 语法文件将单行注释折叠到一个区域中?
我正在整理用于编辑 Java Manifest 文件的语法(在 github 上,如果有人感兴趣的话)。我正在尝试折叠多个单行注释(我目前正在与 匹配syntax match manifestComment "#.*"
)。但是,如果我尝试使用语法区域,那么整个文件都会被标记,整个事情就会崩溃。
我想要实现的是:
并让它崩溃成:
问题是没有明显的“结束”字符,折叠语法也无济于事;所以我做不到syntax region commentBlock start="^#" end="^[^#]"
。粗略地说,语法区域应该从第一个散列字符开始,然后继续向下行,直到找到不以散列开头的行。
scala - 函数式编程、Scala 映射和左折叠
有哪些关于左折叠的好教程?
原始问题,从删除中恢复以提供其他答案的上下文:
我正在尝试实现一种方法来查找矩形、圆形、位置和所有扩展形状的组的边界框。Group 基本上是一个 Shapes 数组
除了第一组之外,我计算了所有三个的边界框。所以现在对于边界框方法,我知道我应该为 Group 使用 map 和 fold left,但我只是找不到创建它的确切语法。
组边界框基本上是包含所有形状的最小边界框。
haskell - 如何在 Haskell 中编写 foldr HOF
我想在我的元组中添加一些金额。我想把它拿出来,汇总并展示。我想使用 Foldr 功能。
有人可以帮我看看怎么做