关于 Y 组合器的Wikipedia 文章提供了 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 函数都有一个固定点(因为对于每个函数g
,Y(g)
并且g(Y(g))
应该相等)。
然而,想出没有固定点的函数并不难Y(g) = g(Y(g))
(见这里)。甚至某些泛函也没有固定点(参见此处)。
每个函数都有一个不动点的证明如何与给定的反例相一致?Y(g) = g(Y(g))
JavaScript 不是适用于证明的无类型 lambda 演算吗?