问题标签 [combinators]

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 投票
7 回答
7911 浏览

haskell - Haskell 地图/zip 与。列表理解

您最有可能写以下哪项?

或者

网上的示例代码似乎表明前者更丰富,是首选方式。

0 投票
2 回答
1442 浏览

binding - 如何在 Clojure 中创建一个生成惰性序列的匿名递归函数?

编辑:我在写这篇文章的过程中发现了我自己问题的部分答案,但我认为它可以很容易地改进,所以无论如何我都会发布它。也许那里有更好的解决方案?

我正在寻找一种简单的方法来以一种let形式定义递归函数,而无需借助letfn. 这可能是一个不合理的要求,但我正在寻找这种技术的原因是因为我混合了数据和递归函数,这些函数在某种程度上需要大量的嵌套letletfn语句。

我想编写生成这样的惰性序列的递归函数(以斐波那契序列为例):

但是在clojure中似乎fibs不能在绑定期间使用它自己的符号。解决它的明显方法是使用letfn

但是正如我之前所说,这会导致很多麻烦的嵌套和交替letand letfn.

为了在不letfn使用和使用 just的情况下做到这一点let,我首先编写了一些使用我认为是 U-combinator 的东西(今天刚刚听说过这个概念):

但是如何摆脱冗余(fi fi)呢?

正是在这一点上,经过一个小时的挣扎并逐渐向组合子 Q 添加位,我找到了自己问题的答案。

Q我用来定义递归序列的这个组合器叫什么?它看起来像没有参数的 Y 组合器x。是一样的吗?

clojure.core 或 clojure.contrib 中是否有另一个函数提供 Y 或 Q 的功能?我无法想象我刚才所做的是惯用的......

0 投票
7 回答
20136 浏览

optimization - foldl 是尾递归的,那么为什么 foldr 比 foldl 运行得快呢?

我想测试 foldl 与 foldr。从我所看到的情况来看,由于尾递归优化,您应该尽可能使用 foldl 而不是 foldr。

这是有道理的。但是,运行此测试后,我很困惑:

foldr(使用 time 命令时需要 0.057 秒):

foldl(使用 time 命令时需要 0.089s):

很明显,这个例子是微不足道的,但我对为什么 foldr 击败 foldl 感到困惑。这不应该是 foldl 获胜的明显案例吗?

0 投票
2 回答
10204 浏览

haskell - 你将如何(重新)在 Haskell 中实现迭代?

(你可能知道)iterate是一个接受函数和起始值的函数。然后它将函数应用于起始值,然后将相同的函数应用于最后一个结果,依此类推。

结果是一个无限列表。(这就是我使用 的原因take)。iterate'我的问题是你将如何在 Haskell 中实现你自己的函数,只使用基础知识( (:) (++)lambdas、模式匹配、守卫等)?

(这里是 Haskell 初学者)

0 投票
5 回答
25261 浏览

function - foldr 和 foldl 进一步的解释和例子

我看过不同的折叠一般折叠以及其他一些折叠,他们解释得很好。

在这种情况下,我仍然无法确定 lambda 的工作方式。

有人可以一步一步地向我解释吗?

还有如何foldl工作?

0 投票
4 回答
3559 浏览

list - 从列表中删除重复项

我有数据类型:

我需要一个函数来获取 SidesType 列表并从中删除重复项。

这是我的解决方案:

我只是想知道是否还有其他方法可以用更多的haskell方式编写这段代码?

0 投票
2 回答
2423 浏览

parsing - 从使用 Scala Parser Combinators 编写的解析器返回有意义的错误消息

我尝试使用 Parser Combinators 在 scala 中编写解析器。如果我递归匹配,

然后,只要语句中有错误,我就会收到很好的错误消息。然而,这是丑陋的长代码。所以我想写这个:

此代码有效,但仅在 FIRST 语句中有错误时才打印有意义的消息。如果它在后面的语句中,则消息将变得非常不可用,因为解析器希望看到整个错误语句被“end”标记替换:

我的问题:有没有办法让reprepsep与有意义的错误消息结合使用,将插入符号放在正确的位置而不是重复片段的开头?

0 投票
2 回答
2048 浏览

parsing - scala解析器组合器中的回溯?

似乎 scala 的解析器组合器不会回溯。我有一个无法正确解析以下“stmt”的语法(见底部):

这应该很容易通过回溯解析:

还是我错过了什么?

解析器:

0 投票
2 回答
2820 浏览

lisp - Scheme中的Y Combinator使用Define

为了了解定点组合器的用途和用途,我编写了自己的。但是,我没有使用严格的匿名函数来编写它,例如Wikipedia 的示例,而是使用了定义:

我已经用阶乘和斐波那契的函数对此进行了测试,它似乎有效。这是否符合定点组合器的正式定义?

0 投票
4 回答
5743 浏览

c# - 如何合并两个 Observables,以便在任何 Observables 完成时结果完成?

我有这个代码:

我已经使用 OnError(new OperationCanceledException()) 解决了我的问题,但我想要一个更好的解决方案(必须有一个组合器对吗?)。