RosettaCodeData/Task/Y-combinator/JavaScript/y-combinator-3.js

18 lines
359 B
JavaScript
Raw Normal View History

2015-02-20 00:35:01 -05:00
function pseudoY(f) {
2013-04-11 01:07:29 -07:00
return (function(h) {
return h(h);
})(function(h) {
2015-02-20 00:35:01 -05:00
return f.bind(function() {
return h(h).apply(null, arguments);
2013-04-11 01:07:29 -07:00
});
});
}
2015-02-20 00:35:01 -05:00
var fac = pseudoY(function(n) {
return n > 1 ? n * this(n - 1) : 1;
});
var fib = pseudoY(function(n) {
return n > 1 ? this(n - 1) + this(n - 2) : n;
});