Y-комбинатор в D?

Я пытаюсь лучше изучить Y-комбинатор (я вроде понимаю его в 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);

Это не работает по той очевидной причине, что я не могу передать факт в факт (каков его тип?). Кроме того, мне все еще нужно передать имя fact самому себе, чтобы оно все равно не сработало, верно?

Но ... как мне реализовать Y-комбинатор в D ?

8
задан Mehrdad 4 August 2011 в 15:51
поделиться