💎コンビネータ一覧


  1. Yコンビネータ (Fixed-point combinator):

    • Yコンビネータは、匿名関数(ラムダ式)を用いて再帰関数を実現するためのコンビネータです。

    • Yコンビネータは、ラムダ計算で再帰を表現するために使用されます。

    • 形式的な定義(λ計算の文法を使用して)は、以下のようになります: Y=λf.(λx.f(xx))(λx.f(xx))

  2. Iコンビネータ (Identity combinator):

    • Iコンビネータは、引数をそのまま返すアイデンティティ関数です。

    • 形式的な定義は: I=λx.x

    • つまり、Iコンビネータに何かを適用すると、その何かがそのまま返されます。

  3. Kコンビネータ: Kxy=x 二つの引数を取り、最初の引数を返します。

  4. Sコンビネータ: Sxyz=xz(yz) 三つの引数を取り、指定された方法でそれらを適用します。

  5. Bコンビネータ (関数合成): Bxyz=x(yz) 三つの引数を取り、中間の関数を最後の引数に適用した結果を、最初の関数に適用します。

  6. Cコンビネータ (引数の順番の入れ替え): Cxyz=xzy

  7. Wコンビネータ: Wxy=xyy 二つの引数を取り、最初の関数を、二つ目の引数に二回適用します。

匿名関数(ラムダ式)を用いて再帰関数を実現することには、いくつかのメリットがあります。以下、その主なメリットと実用例を説明します。

メリット:

  1. 名前のない関数: 匿名関数は名前を持たないため、一時的な計算や関数の適用に使う場合、名前を考える必要がなくなります。これによりコードがスッキリとすることがあります。

  2. コードの局所性: 再帰的な動作を持つ匿名関数を使用することで、その再帰的な動作を局所的なコードの一部として記述できるため、他の部分のコードとの混乱を避けることができます。

  3. 高階関数との組み合わせ: ラムダ計算や関数型プログラミング言語では、関数を別の関数の引数として渡したり、関数から関数を返したりすることが一般的です。このような高階関数と匿名関数を組み合わせることで、非常に柔軟なプログラムの構築が可能となります。


const Y = f => (x => x(x))(x => f(y => x(x)(y)));
const factorial = Y(f => n => (n <= 1 ? 1 : n * f(n - 1)));
console.log(factorial(5));  // 120


お願い致します