D中的Y组合子?

Meh*_*dad 8 functional-programming d lambda-calculus y-combinator

我试图更好地学习Y-combinator(我在Scheme 理解它)并在D 2.0中实现它,而且我很失败:

auto fact = delegate(uint delegate(uint) recurse)
{
    return delegate(uint n)
    {
        return n > 1 ? n * recurse(n - 1) : 1;
    };
};

fact(fact)(5);
Run Code Online (Sandbox Code Playgroud)

这是不行的,原因很明显,我不能传递factfact(将它的类型是什么?).此外,我仍然需要fact传递给自己的名字,所以它无论如何都行不通,对吧?

但是......如何在D中实现Y-combinator呢?

Eli*_*lay 7

请参阅此处的详细说明.