curry化三度
関数テンプレートとauto宣言で型推論(推論じゃないけど)。
import std.c.stdio; class Curry(T, X, Y){ this(int x0, T delegate(X, Y) f0){ x = x0; f = f0; } T opCall(Y y){ return f(x, y); } private: X x; T delegate(X, Y) f; } template curry(T, X, Y) { Curry!(T, X, Y) curry(X x, T delegate(X, Y) f) { return new Curry!(T, X, Y)(x, f); } } void main(){ int hoge(int x, int y){ return x + y; } auto f = curry(3, &hoge); auto y = f; printf("%d, %d\n", f(4), y(2)); }
関数テンプレートの省略記法ないのが気に食わないけどすっきりしている!気にいりました!