■
http://www.kmonos.net/wlog/52.php#_0212050903
この記事をみて面白そうなのでD言語で書いてみた。
memoの部分も綺麗に書きたかったが方法が思いつかなかったので断念。
でもfixの部分を綺麗に書けたから満足としておくか。
template fix(alias f){alias f fix;} template memo(alias f){ int memo(int n){ static int[int]memo_; return (n in memo_)?memo_[n]:(memo_[n]=f(n)); } } template fib_maker(alias f){ int fib_maker(int n){ if(n<=1)return 1; return f!(fib_maker)(n-1)+f!(fib_maker)(n-2); } } void main(){ int function(int)fib; fib = &fib_maker!(fix); for( int i=0 ; i!=10 ; ++i )printf("%d\n",fib(i)); printf("\n"); fib = &fib_maker!(memo); for( int i=0 ; i!=10 ; ++i )printf("%d\n",fib(i)); }