login
Header Space

 
 

Memoizing fixed point combinator in C++

November 14, 2006 - 1:41pm
Submitted by Greg Buchholz on November 14, 2006 - 1:41pm.

Over on comp.lang.c++ they're discussing memoization of functions. Here's my version of a memoized fix point combinator...

#include<iostream>
#include<map>

std::map<int,int> memo_table;

struct Fix
{
    int (*f)(int,Fix);

    int operator()(int x, Fix g)
    { 
        return (memo_table.find(x) != memo_table.end()) 
               ? memo_table[x]
               : memo_table[x] = g.f(x,g);
    };
};

int fib(int n, Fix f) { return n < 2 ? n : f(n-1,f) + f(n-2,f); }

int main(int argc, char *argv[])
{
    Fix g = {fib};
    std::cout << g(40,g) << std::endl;
    return 0;
}

speck-geostationary