Function Currying

766 ワード

関数のコーリー化は、理解しにくいと感じる人が多い.実は難しいのはその翻訳が適切ではないことだ.もし
部分バインド関数
意味は一目瞭然ですか?C++を学んだことがあって、STL std::bind関数を使ったことがある学生はこの翻訳に対してとても親切に感じるべきです:これは名目の上でただ一部のパラメータだけを受け入れて、しかし実は下でこっそり他のパラメータのやり方を補充しますか?
たとえば、次のJS版のbind関数は、関数の最初のパラメータ(実パラメータを事前に指定)をバインドして、新しい関数を生成することができます.
var bind = function(fn, a){
    return function(b){
        return fn(a, b)
    }
}
var mult = function(a, b){
    return a*b
}

//   mult      a,        2
var time2 = bind(mult, 2)

//      time2
time(1) //  2
time(3) //  6

もちろん,厳密にはcurrying後の関数は1つのパラメータしか受け入れられず,これは一般的な部分バインド関数よりも形式的に精錬されている.
このような関数処理方式をcurryingと呼ぶのは、米国の数学者で論理学者、Haskell Curryに由来する.彼が発明したのではないが、このような方式の発揚者である.最初はGottlob Fregeによって提案され,Moses Schönfinkelによって発展し,最終的にHaskell Curryはその大成を集めた.