Я пытаюсь выучить Y-комбинатор лучше (я рода понимаю на схеме) и реализовать его в D 2.0, и я неудачу довольно плачевно:Y-combinator in D?
auto fact = delegate(uint delegate(uint) recurse)
{
return delegate(uint n)
{
return n > 1 ? n * recurse(n - 1) : 1;
};
};
fact(fact)(5);
Это не работа, по той очевидной причине, что я не могу пройти fact
до fact
(каков был бы его тип?). И кроме того, мне все еще нужно имя fact
, чтобы передать ему, так что это не сработает, правда?
Но ... как я могу реализовать Y-комбинатор в D?
делегаты уже являются ссылочными типами, вы можете удалить '&'. – BCS
@BCS: Хорошая точка, это был изначально метод, и я забыл удалить это. Починю. :) – Mehrdad