On Monday, 30 December 2013 at 21:15:43 UTC, Ilya Yaroshenko
wrote:
On Monday, 30 December 2013 at 12:24:28 UTC, lomereiter wrote:
Use Y combinator?
http://forum.dlang.org/thread/mailman.157.1385247528.2552.digitalmars-d-le...@puremagic.com#post-l6rgfq:24g5o:241:40digitalmars.com
This is not lambda =(
I want something like
enum factrorial5 = (a => a == 0 ? 1 : a * __lambda(a-1))(5);
//Recursive pure lambda function
You can do this with __traits(parent, {}), but it's ugly.
auto fact = function(int n)
{
if (n == 0)
{
return 1;
}
else
{
enum self = __traits(parent, {});
return n * self(n - 1);
}
};
Unfortunately, a shorter version written with the lambda syntax
doesn't work, it just segfaults:
auto fact = (int n) =>
(n < 2)
? 1
: n * __traits(parent, {})(n - 1);