カリー化
カリー化(currying)
複数の引数をとる関数を1変数関数に置き換えることをカリー化
f(x, y)な二引数関数があったときに、curry(f)のように関数fを引数に取ってg(x)(y)のよう関数gが出てくるものはカリー化している
curry(f) = g
ここでgはg(x)(y) = f(x, y)であるような関数
ラムダ計算の書き方だと、f(x, y)は$ \lambda x.(\lambda y.(\lambda f(x, y))) ? curry(f)はこんな表記
$ \text{curry}(f) = \lambda x.(\lambda y.(f(x, y)))
f(x, y)は数学の書き方だと2つの集合の直積を取って、新しい集合を返すというものになる。 $ f:(X \times Y) \to Z
$ (X \times Y) 部分は2つのタプル$ (x, y) が渡る、実質1引数関数のような感じ
カリー化で新しい関数gを作る
$ g: X \to (Y \to Z)
カリー化のしたコードを書いたらリジェクトされてしまった話
Haskell以外にもTypeScript、Python、Rubyなどカリー化ができる言語がいくつかある
この記事が良かった
関連
部分適用(partial application) 確認用
Q. カリー化とは
Q. カリー化の例
Q. curry/uncurryの例
Q. Haskellのカリー化、部分適用
Q. Rubyのカリー化、部分適用
Q. Pythonのカリー化、部分適用
Q. カリー化ができると何が便利か
メモ
調査用
Wikipedia.icon
Wikipedia.icon