Я пытаюсь лучше изучить 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 ?