Over on comp.lang.c++ they're discussing memoization [1] 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;
}