问题标签 [y-combinator]

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

function - “组合器”的好解释(非数学家)

有人对“组合器”(Y-组合器等而不是 公司)有很好的解释吗?

我正在寻找一位了解递归和高阶函数但没有强大理论或数学背景的实用程序员。

(注意:我说的是这些东西

0 投票
3 回答
6846 浏览

c++ - C++ 中的定点组合器

我对使用定点组合器的实际示例感兴趣(例如 C++ 中的y 组合器。您是否曾经在真实的实时代码中使用带有egg绑定的定点组合器?

我发现鸡蛋中的这个例子有点密集:

你能解释一下这一切是如何运作的吗?

是否有一个很好的简单示例,可能使用绑定可能比这个更少的依赖项?

0 投票
15 回答
52453 浏览

python - lambda 函数可以在 Python 中递归调用自身吗?

常规函数可以在其定义中包含对自身的调用,这没问题。我不知道如何使用 lambda 函数来做这件事,但原因很简单,lambda 函数没有名称可以引用。有没有办法做到这一点?如何?

0 投票
5 回答
6127 浏览

functional-programming - Y-Combinator 实际示例

我最近读了一些关于函数式编程的书,我正在尝试了解 Y-Combinator。我知道您可以使用 Y-Combinator 以不直接支持递归的语言有效地实现递归。但是,我可能使用的每种语言都已经支持递归,所以我不确定使用 Y-Combinator 会有多大用处。

是否有我缺少的 Y-Combinator 使用的更好的实际示例?有没有人在实际生产代码中实际使用过一个?或者使用 Y-Combinator 真的只是一个令人费解的学术练习(尽管很酷)。

0 投票
5 回答
4259 浏览

f# - 如何在没有“let rec”的情况下定义 y-combinator?

在几乎所有示例中,ML 类型语言中的 y-combinator 都是这样编写的:

这可以按预期工作,但是使用let rec ....

我想在不使用递归的情况下定义这个组合器,使用标准定义:

直接翻译如下:

但是,F# 抱怨它无法确定类型:

如何在不使用的情况下在 F# 中编写 y 组合器let rec ...

0 投票
1 回答
528 浏览

clojure - 定点组合器的用法?为什么这里堆栈溢出?

我对某事感到困惑。我想生成一个示例(在 Clojure 中),演示如何使用定点组合器来评估序列的定点,该序列在无限数量的应用程序后数学上收敛,但实际上会在有限数量的步骤后收敛浮点数的有限精度。我显然在这里遗漏了一些东西。

然后我可以得到

我不明白这个堆栈溢出。更一般地说,与我之前的帖子相关,我想知道是否有人可以提出一个“正确”版本的定点组合器,它可以用来以这种方式逼近序列的定点。

0 投票
2 回答
491 浏览

recursion - 将 Y-Combinator 应用于 Clojure 中具有两个参数的递归函数?

在 Clojure 中为单个参数函数(例如阶乘或斐波那契)执行 Y-Combinator 有据可查: http ://rosettacode.org/wiki/Y_combinator#Clojure

我的问题是 - 例如,对于诸如这个 getter 之类的两个参数函数,您如何做到这一点?

(这里的假设是我想递归地解决这个问题,而这个非惯用的 clojure 代码是出于另一个原因而故意存在的)

[非 y 组合器版本]

0 投票
2 回答
1268 浏览

f# - 您将如何在 F# 中实现定点运算符(Y 组合器)?

我正在使用 F# 创建 lambda 演算。我目前正试图弄清楚如何实现定点运算符(也称为 Y 组合器)。

我认为其他一切都井然有序。表达式由以下可区分联合表示:

我的eval功能似乎有效。以下示例都产生了预期的结果。
示例 1:
> eval (Fun("x",Plus(Const 7,Var("x"))));;
val it : Expr = Fun ("x",Plus (Const 7,Var "x"))
示例 2:
> eval (App(Fun("x",Plus(Const 7,Var("x"))),Const 3));;
val it : Expr = Const 10
示例 3:
> eval (If(Const 0,Const 3,Const 4));;
val it : Expr = Const 4

但正如我所提到的,我很难在我的 lambda 演算中实现定点运算符。这里定义为:
Y = lambda G. (lambda g. G(g g)) (lambda g. G(g g))

有没有人有什么建议?我查看了有关 Y 组合器的其他问题,但找不到任何我能够成功采用的东西。

感谢所有帮助。

编辑:修正了代码中的错字......以前我有Mult而不是Minus在受歧视的工会中。有趣的是我才注意到这一点!

0 投票
5 回答
17212 浏览

haskell - Haskell 中的 Y 组合器

是否可以在 Haskell中编写Y Combinator ?

似乎它将具有无限递归类型。

或者其他的东西。即使是一个简单的轻微因式分解

因“发生检查:无法构造无限类型:t = t -> t2 -> t1”而失败

(Y 组合子看起来像这样

在方案中)或者,更简洁地为

对于申请订单和

对于惰性版本来说,这只是一个 eta 收缩。

如果您更喜欢短变量名。

0 投票
3 回答
126 浏览

javascript - 我可以使用 y-combinator 获取此闭包的对象引用吗?

这个关闭有效:

是否可以在线定义处理程序,也许使用类似于 y-combinator 操作的东西?

出于学术好奇心,我不想在生产代码中这样做

y 组合器简介