C#版
static Func<T, TResult> Fix<T, TResult>(Func<Func<T, TResult>, Func<T, TResult>> f)
{
return x => f(Fix(f))(x);
}
static Func<T1, T2, TResult> Fix<T1, T2, TResult>(Func<Func<T1, T2, TResult>, Func<T1, T2, TResult>> f)
{
return (x, y) => f(Fix(f))(x, y);
}
JavaScript版
var Y = function (F) {
return (function (x) {
return F(function (y) { return (x(x))(y);});
})
(function (x) {
return F(function (y) { return (x(x))(y);});
}) ;
} ;
应用
// var g = λf.λn.(n <= 1 ? 1 : n * f(n - 1))
var g = function(f) {
return function(n) {
if(n <= 1) {
return 1
} else {
return n*f(n-1);
}
}
}
alert(Y(g)(5))

0 Comments.