なんか、カリー化がブームという情報を聞きつけたので、Luaでやってみます。
が、カリー化が何か分からない!
で、Wikipediaを一読しつつ、よくわからないまま具体的な例を出してみます。
・int plus(int a, int b) という関数があって、a+bを返す。
・curry(int a) という関数は、f(int b) というものが返ってくる。
・f(int b) を実行すると、plus(int a, int b) が実行される。
つまり、f = curry(1) とすると、f(2) = 3 と、こうなるわけですね。
ちょっと新しいのは、関数の中に値を隠し持っているところでしょうか。
…もしかして、bind1stとかbind2ndとかかしら。
まぁ、Luaでやってみます。
function plus(a, b)
return a + b
end
function curry(a)
local la = a
return function (b) plus(la, b) end
end
f = curry(1)
-- 3が表示されるはず
print f(2)
Luaでは、localで宣言してreturnで返す値に絡めるという事をよくします。
newのようなメソッドを作りたいときにlocalを使えば、
関数に入るたびに違うインスタンスが作られるので、これを返り値にすればいいのです。
localが外に出せるというのがちょっと抵抗がありますが、これしかないんだから仕方ないというところでしょうか。