カリー化
カリー化 (currying, カリー化された=curried) とは、複数の引数をとる関数を、引数が「もとの関数の最初の引数」で戻り値が「もとの関数の残りの引数を取り結果を返す関数」であるような関数にすること（あるいはその関数のこと）である。クリストファー・ストレイチーにより論理学者ハスケル・カリーにちなんで名付けられたが、実際に考案したのはMoses Schönfinkelとゴットロープ・フレーゲである。
ごく簡単な例として、"f"("a", "b") = "c" という関数 "f" があるときに、"F"("a") = "g"（ここで、"g" は "g"("b") = "c" となる関数である）という関数 "F" が、"f" のカリー化である。
関数 "f" が formula_1 の形のとき、formula_2 をカリー化したものを formula_3 とすると、formula_4 の形を取る。uncurryingは、これの逆の変換である。
理論計算機科学の分野では、カリー化を利用すると、複数の引数をとる関数を、一つの引数のみを取る複数の関数のラムダ計算などの単純な理論的モデルと見なして研究できるようになる。圏論ではカリー化の概念を、デカルト閉圏における冪対象の普遍性に見出せる。適当な2つの対象の積から別の対象への射 formula_5 に対して、射 formula_6 が一意に対応する。
カリー化をする現実の動機の1つに、カリー化することで後述する部分適用が行いやすくなることが挙げられる。たとえば、加算を行う関数 codice_1 をカリー化してから、最初の引数だけに codice_2 を適用すれば、インクリメント用の関数が簡単に作れる。
カリー化を基盤としているプログラミング言語もある。特にMLとHaskellでは関数は常に一つの引数のみを取り、複数の引数を取る関数とは、単にネストされた複数の一引数関数の糖衣構文にすぎない。第一級関数を扱える言語、たとえばLISP、Scheme、F#、Scala、Erlang、Eiffel、Perl、Ruby、Python、R言語、S言語、JavaScript、Swiftなどでは、カリー化関数を作ることができる。