アットウィキロゴ

9.3カリー化

カリー化ですが、カリー化についてのWikipediaがあります。
...最初は意味が分からなかったです。
あと、「カリー化 メリット」とかでググったページを見たのですが現時点でも完全な理解はしていないようです。

まずはScalaでどう実現できているかを頭に入れてからみた方が良いかと。
コップ本ではカリー化の説明として、クロージャを使って関数を分割しています。

以下が宣言です。
scala> def curry(x: Int)(y: Int) = x + y;
curry: (x: Int)(y: Int)Int

クロージャのやり方で、最初に部分的に値を入れます。xが1を持つよう値を入れてみました。
二番目の引数がある場合、プレイスホルダーの_を入れないとエラーになります。
scala> val curry2 = curry(1)_
curry2: Int => Int = <function1>

残りの引数yを入れて出力させます。
scala> println(curry2(2))
3
1 + 2 = 3で3が出力されています。




次に発展系として、引数三つの関数のカリー化に挑戦しようと思います。
 def curry2(x: Int)(y: Int)(z: Int) = x + y * z;

一つ目の引数に1を与えてみます。プレイスホルダーは_一つです。
yとzでプレイスホルダーを2つ付けるのではと一瞬思う人も居るかもしれませんが、一つです。
   val curry02 = curry2(1)_;

残りの引数を与えて出力させてみます。
println(curry02(2)(3))

以下が出力です。
7
1 + 2 * 3で7という想定通りの結果が出力されました。
最終更新:2013年10月06日 12:12
ツールボックス

下から選んでください:

新しいページを作成する
ヘルプ / FAQ もご覧ください。