Решил протестировать способность Nemerle преобразоовать рекурсию в цикл. Написал простую функцию для вычисления n-го числа Фибоначчи:
using System;
using System.Console;
using Nemerle.Utility;
module Program
{
Main() : void
{
def Fib(num : uint)
{
| 0U | 1U => 1 :> ulong
| n => Fib(n - 1) + Fib(n - 2)
}
WriteLine(Fib(100));
ReadLine();
}
}
Судя по скорости выполнения никакого преобразования в цикл не произошло (IL не изучал). Аналогичная программа на С# c использованием циклов выполняется мгновенно:
using System;
namespace ConsoleApplication10
{
class Program
{
static void Main(string[] args)
{
ulong prev = 1;
ulong next = 1;
for (int i = 0; i < 99; i ++)
{
ulong tempNext = next;
next = prev + next;
prev = tempNext;
}
Console.WriteLine(next);
Console.ReadLine();
}
}
}
Скорей всего для вычисления факториала было бы то же самое.
07.09.09 19:07: Перенесено модератором из 'Nemerle' — VladD2