⬑
JavaScript Y Combinator
ES5 Style
var Y = function(f) {
return (function(x) {
return f(function(a) {
return (x(x))(a);
});
})(function(x) {
return f(function(a) {
return (x(x))(a);
});
});
}
var fibo = Y(function(self) {
return function(x) {
if (x <= 2) return 1;
return self(x - 1) + self(x - 2);
}
});
console.log(fibo(10)); // 55
Modern ES Style
let Y = f => (x => f(a => (x(x))(a)))(x => f(a => (x(x))(a)))
let fibo = Y(self => x => {
if (x <= 2) return 1;
return self(x - 1) + self(x - 2);
});
console.log(fibo(10)); // 55