On 03/13/2015 06:51 AM, Dennis Ritchie wrote:
And you can somehow memoization stuff at compile time?

Scarily simple. :D

import std.stdio;

enum N = 15;
enum int[] factorials = memoizeFactorials(N);

int[] memoizeFactorials(int n)
{
    if (!__ctfe) {
        // Make sure that this function is never called at run time
        assert(false);
    }

    int[] result = new int[n];

    result[0] = 1;

    foreach (i; 1 .. n) {
        result[i] = result[i - 1] * i;
    }

    return result;
}

int fact(int n)
{
    return factorials[n];
}

void main()
{
    foreach (i; 0 .. N) {
        writeln(fact(i));
    }
}

Ali

Reply via email to