うーむ
とりあえず、std.bindで遊びたくなって、関数のmemo化を実装してみたけどうまくいかない。
private import std.traits; private import std.bind; ReturnType!(F) memoize(alias F)(ParameterTypeTuple!(F) a){ auto t = tuple(a); static ReturnType!(F)[typeof(t)] memo; if(auto p = t in memo)return *p; auto result = F(a); memo[t] = result; return result; } int fib_(int n){ if(n == 0)return 0; if(n == 1)return 1; return fib(n-1) + fib(n-2); } alias memoize!(fib_) fib; void main(){ printf("%d",fib(30)); }
Error 42: Symbol Undefined _D3std4bind12__T5TupleTiZ5Tuple8toStringMFZAa
とか出やがる*1。
fib_の引数をlongにしたら問題なく通るのを見ると、どうみてもバグ踏んでます。
うーんtemplate使うとこういう謎のリンクエラーがたびたび出るのが嫌だなぁ。