最終更新:2016-10-03 (月) 06:29:23 (2755d)  

カリー化
Top / カリー化

Currying

メモ

  • 複数の引数をとる関数を、引数を一つずつとる関数に変換すること
  • 2引数以上の関数を、1引数の関数の定義だけで同じ機能を持つように定義を書き換えること

概要

  • 20世紀の数学者Haskell Curryの名前から。
  • 2引数の関数f(x, y)に対して、「gがfのカリー化」だとは、f(x, y) = g(x)(y) が常に成立すること
    function sum(x, y) {
     return x + y;
    }
    これをカリー化
    function curried_sum(x) {
     return function (y) {return sum(x, y);}
    }

とすると

js> var x = curried_sum(10)
js> x(15)
25
js> curried_sum(10)(15)
25
js> curried_sum(13)(-20)
-7
js> var f = sum; var g = curried_sum
js> f(123, 999) == g(123)(999)
true
js> 

となる。

メモ

  • 最近は「関数が第一級のオブジェクト」、要は「手続きの固まり」を文字列や数字のようにモノ扱いできる、RubyJavaScriptのような言語が普及しているが、そういう言語では「カリー化」の手法が使える。

関連

参考