yoshikit1996’s diary

日々勉強したことの備忘録です。

カリー化と部分適用の関係

カリー化

カーリー化とは、

カリー化 (currying, カリー化された=curried) とは、複数の引数をとる関数を、引数が「もとの関数の最初の引数」で戻り値が「もとの関数の残りの引数を取り結果を返す関数」であるような関数にすること(あるいはその関数のこと)である。
カリー化 - Wikipedia

なので、↓のコードのf関数や

// ソースコード1
object Main extends App{
    val add = (x: Int, y: Int) => x + y
    val f = (x: Int) => {
        (y: Int) => add(x, y) // add関数が部分適用されている。
    }
    println(f(1)(2))
}

↓のコードのadd関数は、カリーされた関数ということになります。

// ソースコード2
object Main extends App{
    val add = (x: Int) => (y: Int) => x + y
    println(add(1)(2))
}

部分適用

部分適用とは、引数の一部を関数に渡すことです。
ソースコード1のf関数で部分適用が行われています。

結論

部分適用は、カリー化するため手段のうちの1つです。