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