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

scala - 在函数列表上折叠 flatMap/bind(也就是 Name That Combinator!)

在编写一个简单的 RPN 计算器的过程中,我有以下类型别名:

...我写了一段看起来很奇怪的 Scala 代码:

这需要初始stack值并将列表应用于operations该堆栈。每个操作都可能失败(即产生一个Option[Stack]),所以我用flatMap. 对此(在我看来)有点不寻常的是,我正在折叠一个单子函数列表,而不是折叠一个数据列表。

我想知道是否有一个标准函数可以捕获这种“折叠绑定”行为。当我尝试玩“Name That Combinator”游戏时,Hoogle 通常是我的朋友,所以我在 Haskell 中尝试了相同的脑力练习:

这里的类型是:

所以我的神秘foldl (>>=)组合器的类型,在做出类型foldl(>>=)排列之后,应该是:

...这又是我们所期望的。我的问题是在 Hoogle 中搜索具有该类型的函数不会产生任何结果。我尝试了其他一些我认为可能是合理的排列:(a -> [a -> m a] -> m a即从非单子值开始),[a -> m a] -> m a -> m a(即参数翻转),但也没有运气。所以我的问题是,有人知道我神秘的“折叠绑定”组合器的标准名称吗?

0 投票
1 回答
755 浏览

lambda - Lambda演算表达式实现函数应用

我刚刚找到了以下 lambda 演算表达式:

所以这是一个函数,它接受一个参数 f 并返回另一个函数,该函数接受一个参数 x 并产生 x 应用于 f 的结果。上述表达式的结果将是 (λ b . b)。

这让我想起了部分应用程序和柯里化,但是“由内而外”的函数应用程序 (fx) 引起了我的兴趣。

这个表达有更深层次的理论意义吗?

0 投票
1 回答
158 浏览

haskell - 是否可以将呈现的案例优化为一个循环?

假设我有两个函数f :: [a] -> bg :: [a] -> c. 我有以下两个问题:

  1. 如果我执行(f &&& g) xswhere xs :: [a],并且如果两者都f涉及g循环,编译器是否可以将这两个循环优化为一个循环?(请注意,我不是在问某些特定的 Haskell 编译器是否实现了这一点。我想知道这样的事情是否可能。)

  2. traverse类型类中的函数能否Traverse帮助我进行如下优化:

    /li>
0 投票
2 回答
350 浏览

f# - fsharp 中的函数合并/组合器

我有一个函数列表,接受相同类型作为输入,不同类型作为输出

哪个操作可以将它们合并为以下类型的一个函数?

同样,如果我有一个返回相同类型的函数列表

哪个操作可以将它们合并为以下类型的一个函数?

这将是一些规范的“preCombinator”或“postCombinator”。(我想它在 FP 中有一个名字..)

0 投票
3 回答
633 浏览

haskell - 组合器的类型签名与其等效 Lambda 函数的类型签名不匹配

考虑这个组合器:

将其应用于参数 XY:

它签订合同:

我将 S (SK) 转换为相应的 Lambda 项并得到以下结果:

我使用 Haskell WinGHCi 工具获取 (\xy -> xy) 的类型签名并返回:

这对我来说很有意义。

接下来,我使用 WinGHCi 获取 s (sk) 的类型签名并返回:

这对我来说没有意义。为什么类型签名不同?

注意:我将 s、k 和 i 定义为:

0 投票
2 回答
1331 浏览

parsing - Scala:将组合器解析器中的解析结果(〜)展平为列表?

我从组合库中编写了一些解析器。我想要一个通用函数,可以将任何大小的嵌套 ~ 转换为列表。这个怎么做 ?

这是我使用的解析器示例(我真正的解析器有一个很长的链〜所以我想避免使用下面评论中的当前解决方案)。

0 投票
1 回答
1385 浏览

haskell - 这个组合器做了什么:s (sk)

我现在了解的类型签名s (s k)

我可以在 Haskell WinGHCi 工具中创建可以正常工作的示例:

示例

返回2

示例

返回4

其中successor定义为:

尽管如此,我仍然没有直观的感觉s (s k)

组合s (s k)器采用任意两个函数fg。和s (s k)有什么作用?你能给我大局观吗?fgs (s k)

0 投票
1 回答
224 浏览

combinators - FParsec 样式;证明组合器和单子风格之间的差异?

我是 F# 的新手,大约两个月,我最近完成了FParsec 教程并开始寻找更多示例。我读得越多,我就越困惑,然后我开始看到对样式的引用。我寻找更多样式并想出了这个列表。

  • 组合器风格
  • 单子风格
  • 箭头样式
  • 直接风格

有人可以列出所有样式并解释和演示每种样式如何解决常见问题,例如解析

进入

使用

编辑

我从FParsec 中的注释和基于分隔符的语法中选择了组合子和单子样式

直接样式始终显示为直接样式单子解析器

箭头样式出现在Parsec: Direct Style Monadic Parser Combinators For The Real World我还没有阅读所有这些。

编辑

根据建议

组合器风格

0 投票
1 回答
500 浏览

scala - 使用 scala 组合器解析命题逻辑

我已经为大学的一项作业设置了一项家庭作业任务,使用 Scala 组合器来解析命题逻辑,我正要撕毁我的头发,因为我已经为此工作了几个小时,甚至无法通过第一阶段。

最初的部分是构建一个识别器,它构建符合给定 EBNF 形式的识别类型(类型已经单独提供)。([] 表示 0 或一,+ 表示一或多个,* 表示零或多个)

我们在组合器中给出的 scala 代码提供了一个错误的 prop 定义。我已经开始像这样填写类来匹配上面的代码,但是即使我实现它,我也没有捕捉到正确的错误,我认为实际上我不明白你如何指定捕捉一个值解析器

任何帮助,形成更好的语法概述的提示都会有难以置信的帮助,我一直在阅读文档,但似乎仍然无法在我的脑海中点击它。我知道这对于那些习惯于命题逻辑和解析器的人来说是一个相当容易的问题,但我已经摸索了好几个小时了,而且我已经快要一点一点地破解它了。

编辑:更新一个项目给出的语法是错误的,所以我对其进行了调整,现在可以完美运行:

0 投票
2 回答
4641 浏览

scheme - “The Little Schemer”中的 Y 组合器讨论

因此,我花了很多时间阅读和重新阅读The Little Schemer中第 9 章的结尾,其中为该length功能开发了应用 Y 组合器。我认为我的困惑归结为一个对比两个版本的长度的声明(在组合器被分解之前):

第 170 页(第 4 版)指出,A

当我们将它应用于参数时返回一个函数

而乙

不返回函数

从而产生自我应用的无限倒退。我被这件事难住了。如果 B 受到这个问题的困扰,我看不出 A 是如何避免的。