「カリー化」の版間の差分

削除された内容 追加された内容
記事内の記述でカリー化と部分適用を混同している箇所を修正
m編集の要約なし
10行目:
[[理論計算機科学]]の分野では、カリー化を利用すると、複数の引数をとる関数を、一つの引数のみを取る複数の関数の[[ラムダ計算]]などの単純な理論的モデルと見なして研究できるようになる。[[圏論]]では、カリー化の概念を[[デカルト閉圏]]における[[冪対象]]の[[普遍性]]に見出せる。適当な2つの[[対象 (圏論)|対象]]の[[積 (圏論)|積]]から別の対象への[[射 (圏論)|射]] <math>f: X \times Y \to Z</math> に対して、射 <math>g: X \to Z^Y</math> が一意に対応する。
 
カリー化をする現実の動機の1つに、カリー化することで後述する[[部分適用]]が行いやすくなることが挙げられる。たとえば、加算を行う関数 <code>(+)</code> をカリー化してから、最初の引数だけに <code>1</code> を適用すれば、インクリメント用の関数が簡単に作れる。
 
カリー化を基盤としている[[プログラミング言語]]もある。特に[[ML (プログラミング言語)|ML]]と[[Haskell]]では関数は常に一つの引数のみを取り、複数の引数を取る関数とは、単にネストされた複数の一引数関数の[[糖衣構文]]にすぎない。[[第一級関数]]を扱える言語、たとえば[[LISP]]、[[Scheme]]、[[Scala]]、[[Erlang]]、[[Eiffel]]、[[Perl]]、[[Ruby]]、[[Python]]、[[R言語]]、[[S言語]]、[[JavaScript]]などでは、カリー化関数を作ることができる。