6 ms·
Javascript can do it all: function fac(x){ return x==0?1:x*fac(x-1); } a = fac(8); or a one-liner: a = (function fac(x){ return x==0?1:x*fac(x-1); })
by TweedHeads 17y ago
Javascript can do it all:
function fac(x){ return x==0?1:x*fac(x-1); }
a = fac(8);
or a one-liner:
a = (function fac(x){ return x==0?1:x*fac(x-1); })(8);
Both ways spit 4320
- deleted 17y ago[deleted]
- gamache 17y agoThe Y combinator allows the definition of anonymous recursive functions. These have names ("fac"). Personally, I have never found much of a reason to use the Y combinator. I typically use the method you used in the second example; I declare a named function within the scope of the anonymous one. I find it to be a readability win.
- tilly 17y agoYou can still do a Y combinator in JavaScript. In http://www.mail-archive.com/boston-pm@mail.pm.org/msg02716.html http://www.mail-archive.com/boston-pm@mail.pm.org/msg02716.h... I not only show how to do it, but I show one way that someone reasonably could come up with the construct. But I agree with you that Y combinators are not generally a good approach for working programmers because there are clearer ways of accomplishing the same thing. However I've heard that in some functional languages they can be very useful as a pattern to compile language constructs to.
- IsaacSchlueter 17y agoI also did something like this. It's fun to port lisp constructs to Javascript. http://foohack.com/tests/ycomb.html http://foohack.com/tests/ycomb.html
- TweedHeads 17y agoFull anonimity, thanks to tilly (separated for better understanding): builder = function(x){ return function(n){ return x(x)(n); }} factorial = function(f){ return function(n){ return n==0?1:n*f(f)(n-1);} } alert(builder(factorial)(8)) One liner, just seed factorial to builder: r = (function(x){ return function(n){ return x(x)(n); } } (function(f){ return function(n){ return n==0?1:n*f(f)(n-1);} }))(8);
- lhorie 17y agoDoes this count as an anonymous recursive function? a = (function(x) {return x == 0 ? 1 : x * arguments.callee(x - 1)})(8);
- TweedHeads 17y agoBeautiful!
- cema 17y ago40320. (They do.)