💎コンビネータ一覧
Yコンビネータ (Fixed-point combinator):
Yコンビネータは、匿名関数(ラムダ式)を用いて再帰関数を実現するためのコンビネータです。
Yコンビネータは、ラムダ計算で再帰を表現するために使用されます。
形式的な定義(λ計算の文法を使用して)は、以下のようになります: Y=λf.(λx.f(xx))(λx.f(xx))
Iコンビネータ (Identity combinator):
Iコンビネータは、引数をそのまま返すアイデンティティ関数です。
形式的な定義は: I=λx.x
つまり、Iコンビネータに何かを適用すると、その何かがそのまま返されます。
Kコンビネータ: Kxy=x 二つの引数を取り、最初の引数を返します。
Sコンビネータ: Sxyz=xz(yz) 三つの引数を取り、指定された方法でそれらを適用します。
Bコンビネータ (関数合成): Bxyz=x(yz) 三つの引数を取り、中間の関数を最後の引数に適用した結果を、最初の関数に適用します。
Cコンビネータ (引数の順番の入れ替え): Cxyz=xzy
Wコンビネータ: Wxy=xyy 二つの引数を取り、最初の関数を、二つ目の引数に二回適用します。
匿名関数(ラムダ式)を用いて再帰関数を実現することには、いくつかのメリットがあります。以下、その主なメリットと実用例を説明します。
メリット:
名前のない関数: 匿名関数は名前を持たないため、一時的な計算や関数の適用に使う場合、名前を考える必要がなくなります。これによりコードがスッキリとすることがあります。
コードの局所性: 再帰的な動作を持つ匿名関数を使用することで、その再帰的な動作を局所的なコードの一部として記述できるため、他の部分のコードとの混乱を避けることができます。
高階関数との組み合わせ: ラムダ計算や関数型プログラミング言語では、関数を別の関数の引数として渡したり、関数から関数を返したりすることが一般的です。このような高階関数と匿名関数を組み合わせることで、非常に柔軟なプログラムの構築が可能となります。
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
いいなと思ったら応援しよう!
![あたり帳簿](https://assets.st-note.com/production/uploads/images/146045306/profile_76a0adfc7bd4b4908ef76d29ad61ae98.png?width=600&crop=1:1,smart)