What is it, naokirin?

カリー化

最近、勉強ができていない、といいつつやっぱりやらない。
これはどうにかせねばならんと思う今日この頃。



でそんな私の近況はおいといて、今日はカリー化について。


Haskellで一度見たけど、説明が難解な書き方をしていたためか、単に私の頭が悪かっただけなのか。
それはさておき、ガウディ本で書いてある説明は簡潔で分かりやすい。

ざっくり言うと「引数がn個の関数の代わりに、引数が1個の関数をn重の入れ子にした関数にしてしまおう」ということらしい。
結局、最初の引数をもらって、残りの必要な引数を持つ関数を返す関数。

これだけでは「入れ子を増やすか、引数増やすかの単なる『見やすさ』の差とか好みとかの問題じゃないの?」という感じは否めないが、そういうわけでもないらしい。

・物事を単純化できる。
・戻り値が関数なので、実行時に評価できる(遅延評価)。

のがメリットのよう。確かに引数を全部渡したりする必要はないし、部分的に引数を与えた状態で変数に束縛して、後で残りの引数を与えるなんてこともできる。
それに引数が多くなり過ぎた時には便利かもしれない。

関数型言語に慣れてる人の話では、使いやすいとかそういう話をWebで見るけど、オブジェクト指向とか手続き型とかに慣れてる人にはあまり恩恵を感じにくいもの。自動的にカリー化されるとかだったら便利そうだけど。