Y Combinators

by Trae

JavaScript

var y = function(le) {
	return function(f){
        return f(f);
    }(function(f) {
		return le(
			function(x) {
				return (f(f))(x);
			}
		);
	});   
};

var factor = y(function(fn){
    return function(n){
        console.log(n);
        return n < 2?1:n*fn(n-1);
    }
});

var fibbonaci = y(function(fn){
    return function(n){
        console.log(n);
        return n <= 2?1:fn(n-1)+fn(n-2);
    }
});

console.log(factor(5));
console.log(fibbonaci(5));