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

lambda-calculus - Y-组合子定义

我试图理解定点组合器。我认为某些语言使用它来实现递归。主要问题是我无法得到下一个定义:

点击这里查看图片

所以请解释一下图像。

0 投票
1 回答
395 浏览

javascript - javascript 中的 Y-Combinator 阶乘适用于数字,而不适用于 Church 数字。

我设法在 javascript 中使用 ES6 箭头函数实现 Church 编码和 Y-Combinator。但是当我试图评估阶乘函数时,

我收到“未捕获 RangeError:超出最大调用堆栈大小(…)”错误。

如果我改变 FactGen,

它只是工作。

我想知道的是它的教堂数字版本。我怎样才能做到这一点?

0 投票
1 回答
721 浏览

ocaml - 如何使用 ocaml 中的 Y 组合器调用具有多个参数的函数?

我试图理解 OCaml 中的 Y 组合子。我从这里拿了一些代码,并试图用它来编写 Ackermann 函数。在链接中的示例中,函数只需要一个参数。Ackermann 函数需要两个参数,因此我一直遇到语法错误。我到目前为止的代码是

我需要做什么才能让它工作?谢谢。

0 投票
3 回答
2012 浏览

scala - 解释一下 Scala 中 Y 组合器的实现?

这是 Scala 中 Y-combinator 的实现:

Q1:结果如何120一步步得出?因为Y(func)定义为func(Y(func)),所以Y应该越来越大,Y在哪里丢失120了,在执行过程中又是如何出来的?

Q2:两者有什么区别

它们在scala REPL中是相同的类型,但是第二个不能打印结果120

0 投票
1 回答
57 浏览

ruby - 禁用 Ruby 中的递归以强制使用 Y Combinator

Ruby 的递归如何被“破坏”以禁用 ruby​​ 方法进行递归的能力?

需要创建一个教授 lambda 演算的程序,但使用 Ruby。

来自 Crockford 的 JavaScript 动机 - https://www.youtube.com/watch?v=ya4UHuXNygM&feature=youtu.be&t=1h9m53s

0 投票
1 回答
1969 浏览

c++ - 通过通用 lambda 了解 Y Combinator

在构建一个基于 lambda 的小型元编程库时,我不得不在 C++14 通用 lambda 中使用递归来实现left-fold

我自己的解决方案是将 lambda 本身作为其参数之一传递,如下所示:

step是开始递归的“主要” lambda。它返回一个具有所需左折叠签名的函数(累加器、当前项、剩余项...)

该函数通过使用递归调用自身self(self)(next, y_xs...)

我最近遇到了这个提案,想在标准库中添加一个Y Combinator,读了之后,似乎和我在这里做的非常相似。

不幸的是,Y Combinator 的概念对我来说仍然没有“点击”——我遗漏了一些东西,我无法想象如何概括我self对任何函数的参数所做的事情,避免使用step样板。

我已经阅读了这个关于此事的优秀 StackOverflow 答案,但它仍然没有为我“点击”。

(从那个答案)递归阶乘是这样定义的:

recurs参数似乎与我的参数具有相同的作用self。我不明白的是如何recurs调用而不recurs再次进入自身。

我必须这样称呼selfself(self)(params...)

recurs然而,被称为 like recurs(params...)

尝试调用self(params...)会导致编译器错误通知我self只需要一个参数(即auto selflambda 参数)

我在这里想念什么?我怎样才能重写我的fold_l_impllambda,使其递归可以通过使用 Y Combinator 来概括?

0 投票
2 回答
1156 浏览

recursion - 递归 lambda 演算函数

我想创建一个 lambda 演算函数 P 这样(P x y z)给出((x y)(x P)(P z)). 我曾尝试使用 Y-combinator/Turing 组合器的变体,即 formλg.(g g)的函数,因为我需要重现函数本身,但我看不到任何前进的方向。任何帮助将不胜感激。

0 投票
4 回答
910 浏览

javascript - Y-combinator 如何以编程方式计算不动点?

我相信我在数学上理解 Y-combinator 的概念:它返回给定函数 的不动点,F因此满足.f = Y(F)ff == F(f)

但我不明白它是如何明智地执行实际计算程序的?

让我们以这里给出的 javascript 示例为例:

我不明白的部分是computed_factorial函数(不动点)实际上是如何计算的?通过跟踪 Y 的定义,您会发现它在该部分遇到了无限递归x(x),我看不到那里暗示任何终止情况。然而,它奇怪地确实回来了。谁能解释一下?

0 投票
1 回答
815 浏览

scheme - Y Combinator 实现方案

我对计划函数式编程真的很陌生。我最近在 lambda 演算中遇到了 Y-combinator 函数,类似这样Y ≡ (λy.(λx.y(xx))(λx.y(xx)))。我想在方案中实现它,我搜索了很多,但我没有找到任何与上述给定结构完全匹配的实现。我发现其中一些如下:

如您所见,它们与此Y ≡ (λy.(λx.y(xx))(λx.y(xx)))组合函数的结构不匹配。如何以完全相同的方式在方案中实现它?

0 投票
1 回答
439 浏览

haskell - 如何使用 Y-Combinator;为什么这个无限递归返回 9?

Y - 组合器

我一直在尝试了解 Y-Combinators (对此的解释也很可爱),并从这个wiki遇到了一个例子。在 Haskell 或 Python 中对该主题进行深入的解释将不胜感激。请!

代码

问题

调用的函数在应用于时fix返回,我不知道为什么;当我跟随我想象的堆栈时。9fix(\x -> 9)f(f ... (fix f) ...)