Memoization in compile-time

Ali Çehreli via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Fri Mar 13 11:28:54 PDT 2015


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



More information about the Digitalmars-d-learn mailing list