カリー化については、キマイラ・サイトのここにコソッとチョコッと書いてあったりしますが、2変数(一般にn変数)の関数を1変数関数にする手順です。
例えば、Sum ≡ λx,y.(x + y) のとき、与えられたxに対して関数 λy.(x + y) を返すような関数 x → λy.(x + y) は、λx.λy.(x + y) と書けますね。λx.λy.(x + y) を、λx,y.(x + y) のカリー化と呼びます。
大事なこと: SumCurry ≡ λx.λy.(x + y) とすれば、
どんなx, yに対しても、Sum(x, y) = SumCurry(x)(y)
さーて、groovyコードでやってみる:
// Curry化
Sum = {|x, y| x + y}
println Sum(2, 3)SumCurry = {|x| {|y| x + y}}
println SumCurry(2) // 値はクロージャ
println SumCurry(2)(3)
println SumCurry("Hello")(", world.")
5
lambda$_run_closure5_closure14@2e98ca2c
5
Hello, world.
(続く、けど間があく)