问题标签 [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.
python - lambda 函数可以在 Python 中递归调用自身吗?
常规函数可以在其定义中包含对自身的调用,这没问题。我不知道如何使用 lambda 函数来做这件事,但原因很简单,lambda 函数没有名称可以引用。有没有办法做到这一点?如何?
functional-programming - Y-Combinator 实际示例
我最近读了一些关于函数式编程的书,我正在尝试了解 Y-Combinator。我知道您可以使用 Y-Combinator 以不直接支持递归的语言有效地实现递归。但是,我可能使用的每种语言都已经支持递归,所以我不确定使用 Y-Combinator 会有多大用处。
是否有我缺少的 Y-Combinator 使用的更好的实际示例?有没有人在实际生产代码中实际使用过一个?或者使用 Y-Combinator 真的只是一个令人费解的学术练习(尽管很酷)。
f# - 如何在没有“let rec”的情况下定义 y-combinator?
在几乎所有示例中,ML 类型语言中的 y-combinator 都是这样编写的:
这可以按预期工作,但是使用let rec ...
.
我想在不使用递归的情况下定义这个组合器,使用标准定义:
直接翻译如下:
但是,F# 抱怨它无法确定类型:
如何在不使用的情况下在 F# 中编写 y 组合器let rec ...
?
clojure - 定点组合器的用法?为什么这里堆栈溢出?
我对某事感到困惑。我想生成一个示例(在 Clojure 中),演示如何使用定点组合器来评估序列的定点,该序列在无限数量的应用程序后数学上收敛,但实际上会在有限数量的步骤后收敛浮点数的有限精度。我显然在这里遗漏了一些东西。
然后我可以得到
我不明白这个堆栈溢出。更一般地说,与我之前的帖子相关,我想知道是否有人可以提出一个“正确”版本的定点组合器,它可以用来以这种方式逼近序列的定点。
recursion - 将 Y-Combinator 应用于 Clojure 中具有两个参数的递归函数?
在 Clojure 中为单个参数函数(例如阶乘或斐波那契)执行 Y-Combinator 有据可查: http ://rosettacode.org/wiki/Y_combinator#Clojure
我的问题是 - 例如,对于诸如这个 getter 之类的两个参数函数,您如何做到这一点?
(这里的假设是我想递归地解决这个问题,而这个非惯用的 clojure 代码是出于另一个原因而故意存在的)
[非 y 组合器版本]
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
在受歧视的工会中。有趣的是我才注意到这一点!
haskell - Haskell 中的 Y 组合器
是否可以在 Haskell中编写Y Combinator ?
似乎它将具有无限递归类型。
或者其他的东西。即使是一个简单的轻微因式分解
因“发生检查:无法构造无限类型:t = t -> t2 -> t1”而失败
(Y 组合子看起来像这样
在方案中)或者,更简洁地为
对于申请订单和
对于惰性版本来说,这只是一个 eta 收缩。
如果您更喜欢短变量名。