カリー化
カリー化(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)
from: https://x.com/public_ai000ya/status/1739236250371133609?s=20
カリー化のしたコードを書いたらリジェクトされてしまった話
Haskell以外にもTypeScript、Python、Rubyなどカリー化ができる言語がいくつかある
カリー化 ≠ 部分適用
この記事が良かった
【TypeScript】カリー化・部分適用は便利だよ! #TypeScript - Qiita
関連
関数型プログラミング
部分適用(partial application)
直積集合
関数
確認用
Q. カリー化とは
Q. カリー化の例
Q. curry/uncurryの例
Q. Haskellのカリー化、部分適用
Q. Rubyのカリー化、部分適用
Q. Pythonのカリー化、部分適用
Q. カリー化ができると何が便利か
メモ
カリー化記述まとめ #Python - Qiita
Rubyにおけるカリー化(Method.curry)と関数合成(<<) - やわらかテック
カリー化談義
カリー化と部分適用の違いと誤用 - posfie
Data.Tuple
カリー化 != 部分適用 - kmizuの日記
The Uncarved Block: Partial Function Application is not Currying
調査用
Google.icon カリー化(日)
Google.icon Currying(英)
Wikipedia.icon
カリー化 - Wikipedia(日)
カリー化(検索) - Wikipedia(日)
Wikipedia.icon
Currying - Wikipedia(英)
Currying(検索) - Wikipedia(英)