Javaでアキュムレーター


2010年 12月 18日

Javaで高階関数を試してみたはいいけれど、 わりと王道っぽいことをしていなかったな…と思いました。 ということで、アキュムレーターです。
Function<Function<Integer, Integer>, Integer> acum =
new Function<Function<Integer, Integer>, Integer>(){
private Integer x;
public Function<Integer, Integer> call(Integer...xs){
x = xs[0];
return new Function<Integer, Integer>(){
public Integer call(Integer...xs){
return x += 1;
}
};
}
};
Function<Integer, Integer> f = acum.call(10);
for(int i = 0; i < 10; i++)
System.out.println(f.call());
view raw acum.java hosted with ❤ by GitHub
ローカル変数のスコープでクラス(っぽいもの)がお手軽につくれるのがいいと思います。 短く書くにはどうしたらいいんだろうと試行錯誤しているうちに…
class a {interface f<b,c>{public b c(c..._);}public static void main(String...as){f<Integer, Integer>
a = new f<f<Integer, Integer>, Integer>(){int
x ;public f<Integer, Integer> c(Integer..._){
x=_[0] ;return new f<Integer, Integer>(){public Integer c(Integer..._){return
x+=1 ;};};};}
.c(10) ;for(int
i=0;i<10;i++ ,System.out.
println(a.c())) ;}}
悪ノリしてしまいました。 邪魔っぽいものを右に寄せたので、見てみぬふりしてください!