问题标签 [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.
haskell - Haskell 地图/zip 与。列表理解
您最有可能写以下哪项?
或者
网上的示例代码似乎表明前者更丰富,是首选方式。
binding - 如何在 Clojure 中创建一个生成惰性序列的匿名递归函数?
编辑:我在写这篇文章的过程中发现了我自己问题的部分答案,但我认为它可以很容易地改进,所以无论如何我都会发布它。也许那里有更好的解决方案?
我正在寻找一种简单的方法来以一种let
形式定义递归函数,而无需借助letfn
. 这可能是一个不合理的要求,但我正在寻找这种技术的原因是因为我混合了数据和递归函数,这些函数在某种程度上需要大量的嵌套let
和letfn
语句。
我想编写生成这样的惰性序列的递归函数(以斐波那契序列为例):
但是在clojure中似乎fibs
不能在绑定期间使用它自己的符号。解决它的明显方法是使用letfn
但是正如我之前所说,这会导致很多麻烦的嵌套和交替let
and letfn
.
为了在不letfn
使用和使用 just的情况下做到这一点let
,我首先编写了一些使用我认为是 U-combinator 的东西(今天刚刚听说过这个概念):
但是如何摆脱冗余(fi fi)
呢?
正是在这一点上,经过一个小时的挣扎并逐渐向组合子 Q 添加位,我找到了自己问题的答案。
Q
我用来定义递归序列的这个组合器叫什么?它看起来像没有参数的 Y 组合器x
。是一样的吗?
clojure.core 或 clojure.contrib 中是否有另一个函数提供 Y 或 Q 的功能?我无法想象我刚才所做的是惯用的......
optimization - foldl 是尾递归的,那么为什么 foldr 比 foldl 运行得快呢?
我想测试 foldl 与 foldr。从我所看到的情况来看,由于尾递归优化,您应该尽可能使用 foldl 而不是 foldr。
这是有道理的。但是,运行此测试后,我很困惑:
foldr(使用 time 命令时需要 0.057 秒):
foldl(使用 time 命令时需要 0.089s):
很明显,这个例子是微不足道的,但我对为什么 foldr 击败 foldl 感到困惑。这不应该是 foldl 获胜的明显案例吗?
haskell - 你将如何(重新)在 Haskell 中实现迭代?
(你可能知道)iterate
是一个接受函数和起始值的函数。然后它将函数应用于起始值,然后将相同的函数应用于最后一个结果,依此类推。
结果是一个无限列表。(这就是我使用 的原因take
)。iterate'
我的问题是你将如何在 Haskell 中实现你自己的函数,只使用基础知识( (:)
(++)
lambdas、模式匹配、守卫等)?
(这里是 Haskell 初学者)
list - 从列表中删除重复项
我有数据类型:
我需要一个函数来获取 SidesType 列表并从中删除重复项。
这是我的解决方案:
我只是想知道是否还有其他方法可以用更多的haskell方式编写这段代码?
parsing - 从使用 Scala Parser Combinators 编写的解析器返回有意义的错误消息
我尝试使用 Parser Combinators 在 scala 中编写解析器。如果我递归匹配,
然后,只要语句中有错误,我就会收到很好的错误消息。然而,这是丑陋的长代码。所以我想写这个:
此代码有效,但仅在 FIRST 语句中有错误时才打印有意义的消息。如果它在后面的语句中,则消息将变得非常不可用,因为解析器希望看到整个错误语句被“end”标记替换:
我的问题:有没有办法让rep和repsep与有意义的错误消息结合使用,将插入符号放在正确的位置而不是重复片段的开头?
parsing - scala解析器组合器中的回溯?
似乎 scala 的解析器组合器不会回溯。我有一个无法正确解析以下“stmt”的语法(见底部):
这应该很容易通过回溯解析:
还是我错过了什么?
解析器:
lisp - Scheme中的Y Combinator使用Define
为了了解定点组合器的用途和用途,我编写了自己的。但是,我没有使用严格的匿名函数来编写它,例如Wikipedia 的示例,而是使用了定义:
我已经用阶乘和斐波那契的函数对此进行了测试,它似乎有效。这是否符合定点组合器的正式定义?
c# - 如何合并两个 Observables,以便在任何 Observables 完成时结果完成?
我有这个代码:
我已经使用 OnError(new OperationCanceledException()) 解决了我的问题,但我想要一个更好的解决方案(必须有一个组合器对吗?)。