Здравствуйте, Vermicious Knid, Вы писали:
VD>>Кстати, раз уж мы говорим о функциональном языке, то факториалы лучше тоже в функциональном стиле описывать:
VK>Код который ты привел крайне похож на то, что генерирует макрос for.
Естественно.
VK> Уж проще воспользоваться им. Ну его к черту, этот функциональный стиль. В этой задаче он ни к чему, особенно если он не способствует улучшению читабельности.
Откровенно говоря не вижу в данном случае особой разницы.
def Fact(x : uint) : ulong
{
mutable acc = 1UL;
for (mutable i = x; i > 0; i--)
acc = acc * i;
acc
}
и:
def Fact(x : uint) : ulong
{
def Loop(acc : ulong, x : uint)
{
if (x <= 1) acc else Loop(acc * x, x - 1)
}
Loop(1UL, x)
}
Немерле мне тем и нравится, что можно выбирать стиль под задачу, отталкиваясь от того как она тебе видится. Например, когда я думаю о древесных задачях, то мне они видятся как рекурсивные и преобрзование их в итерацию приводит к ступору.
Однако если уж используется рекурсия, то глупо отакзываться от концевой рекурсии. Ведь это точно даст выигрыш в скорости. А ввести внутреннюю функцию и акумулятор не проблема.
ЗЫ
Похоже у тебя и правда плохое настроение.

... << RSDN@Home 1.2.0 alpha rev. 637>>