Y Combinators in C#
blogs.msdn.com
blogs.msdn.com
Or maybe it's because more of the tech entrepreneurs are also linux types, and are more familiar with python and Java?
You don't have to buy it. Microsoft explicitly says you can use Express versions for commercial purposes.
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 4320Personally, 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.
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.
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);a = (function(x) {return x == 0 ? 1 : x * arguments.callee(x - 1)})(8);