/ / メモ
2008-11-20

http://www.kmonos.net/wlog/52.php#_0308050827
を写経

int delegate(int) fib_maker(int delegate(int) f)
{
    return (int n){return n <= 1 ? 1 : f(n-1) + f(n-2);};
}

int delegate(int) fix(int delegate(int) function(int delegate(int)) g)
{
    int delegate(int) f;
    f = (int n){return f(n);};
    f = g(f);
    return f;
}

int delegate(int) fix_memo(int delegate(int) function(int delegate(int)) g)
{
    int delegate(int) f;
    int[int] memo;
    f = (int n){return n in memo ? memo[n] : (memo[n] = f(n));};
    f = g(f);
    return f;
}

void main(){
    auto fib = fix(&fib_maker);
    for( int i=0 ; i!=31 ; ++i ) writefln(fib(i));

    auto fib_memo = fix_memo(&fib_maker);
    for( int i=0 ; i!=31 ; ++i ) writefln(fib_memo(i));
}

写経するだけでも苦労した。

トラックバック http://mikanya.dip.jp/memo/2008-11-20-1