部分適用(Partial Application)

**部分適用(Partial Application)**とは、関数の引数の一部に値を固定し、新しい関数を生成する技法を指します。これは関数型プログラミングにおける重要な概念であり、カリー化(Currying)と密接な関係を持ちます。


基本概念

部分適用は、多引数関数に対して一部の引数だけを先に与えることにより、より少ない引数を受け取る関数を作る操作です。

例として、3つの引数を取る関数 f(a, b, c) を考えた場合に、最初の引数 a に値を与えることで、新たに g(b, c) = f(a, b, c) という関数を生成することができます。これが部分適用です。


例(JavaScript)

javascript
function multiply(x, y) { return x * y; } // 部分適用:xを固定して、新しい関数を生成 function multiplyBy2(y) { return multiply(2, y); } console.log(multiplyBy2(5)); // 出力: 10

上記では multiply は2引数関数ですが、x = 2 を先に与えることで、1引数の関数 multiplyBy2 を定義しています。これが部分適用の一例です。


カリー化との違い

  • **カリー化(Currying)**は、関数を「一引数の関数の連鎖」に変換すること。

  • 部分適用(Partial Application)は、カリー化された(またはされていない)関数の引数を一部だけ指定して新しい関数を作る操作

javascript
// カリー化の例 const add = x => y => x + y; // 部分適用的に使える const add5 = add(5); // y => 5 + y console.log(add5(3)); // 出力: 8

利点

  • コードの再利用性が高まる:共通のパラメータを固定して新しい関数を簡潔に作成可能。

  • 関数の抽象化:処理の一部を遅延して後で指定できる。

  • 高階関数との相性が良い:mapやfilterなどに使いやすい。


関数型言語でのサポート

多くの関数型言語(Haskell、OCaml、Scalaなど)では、カリー化が標準のため、部分適用が自然にサポートされています。

Haskellの例

haskell
add :: Int -> Int -> Int add x y = x + y add5 = add 5 -- 部分適用で5を固定 result = add5 3 -- 出力: 8

まとめ

  • 部分適用は、多引数関数の一部の引数に値を与えて新しい関数を生成する技法。

  • カリー化された関数とは非常に相性が良い。

  • 再利用性、抽象化、可読性の向上に役立つ。

関数型プログラミングにおいて、部分適用は柔軟で強力な表現力を提供する基本的な道具です。

生成日:2025/06/01