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));
}