javascript - Y 组合器 : Some functions do not have fixed points

标签 javascript y-combinator

Wikipedia article on the Y combinator提供了 Y 组合器的以下 JavaScript 实现:

function Y(f) {
    return (
        (function (x) {
            return f(function (v) { return x(x)(v); }); })
        (function (x) {
            return f(function (v) { return x(x)(v); }); })
    );
}

JavaScript 中 Y 组合器的存在意味着每个 JavaScript 函数都有一个不动点(因为对于每个函数 gY(g) g(Y(g)) 应该相等)。

但是,不难想出违反 Y(g) = g(Y(g)) 的不带不动点的函数(参见 here )。甚至某些泛函也没有不动点(参见 here )。

每个函数都有不动点的证明如何与给定的反例协调一致? JavaScript 不是一种无类型的 lambda 演算,其中 Y(g) = g(Y(g)) 的证明适用吗?

最佳答案

据我对维基百科文章的理解,它并不暗示“每个 JavaScript 函数都有一个固定点”,这个例子只是展示了如何为按照其规范具有它的函数实现 Y 组合子。

不,根据那篇文章和 an article on fixed point 中的定义,JavaScript 不能是无类型的 lambda 演算,因为它可以制定显然无法通过“有不动点”检查的函数,例如 function f(x){ return x + 1 } x ^ 1 如果你想包含非数字并因此失败“每个函数都有至少一个固定点”检查。

关于javascript - Y 组合器 : Some functions do not have fixed points,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11032481/

相关文章:

lambda - (self self) 在 let 语句中调用,用严格的语言

javascript - 递归函数的高阶函数?

javascript - 单击时的 CSS/JS 动画

javascript - 让 Melon JS 与我的代码一起工作

javascript - 将弹出窗口置于最前面

javascript - 如何获取json返回值

c# - 递归函数、堆栈溢出和 Y 组合器

ios - 将采用转义闭包的闭包传递给接受该类型闭包的函数的问题

lambda - 在Lambda演算中定义堆栈数据结构及其主要操作

javascript - 根据单击的 HTML 类运行 Javascript