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);

Reply via email to