このブログの更新は Twitterアカウント @m_hiyama で通知されます。
Follow @m_hiyama

メールでのご連絡は hiyama{at}chimaira{dot}org まで。

はじめてのメールはスパムと判定されることがあります。最初は、信頼されているドメインから差し障りのない文面を送っていただけると、スパムと判定されにくいと思います。

参照用 記事

groovyとラムダ式(3):カリー(Curry)化

カリー化については、キマイラ・サイトのここにコソッとチョコッと書いてあったりしますが、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.

(続く、けど間があく)