Здравствуйте, Oyster, Вы писали:
O>O>namespace Oyster
O>{
O> public module Math
O> {
O> // Просто метод, который просто считает факториал в рантайме
O> static public Fact(x : int) : int
O> {
O> | 1 => 1
O> | _ =>
O> if (x > 1)
O> x * Fact(x - 1)
O> else
O> throw ArgumentException("x")
O> }
O> }
O>}
O>
Кстати, если сравнить реализацию compile-time вычисления факториала на C++:
template< int N >
struct Factorial {
enum { value = N * Factorial< N-1 >::value };
};
template<>
struct Factorial< 1 > {
enum { value = 1 };
};
template<>
struct Factorial< 0 > {};
то мне кажется, что она получается в более функциональном стиле, что ли

И не на много длиннее в реализации.
Вот только синтаксический оверхэд в виде template<> struct под ногами путается

Зато компилятор не дает вычислять факториал нуля