SKI と BCKW の微積分の作成方法と考え方は理解できますが、実際の使用法を見つけることができません。多分私は十分に深く見ていませんか?つまり、Java サーブレットは S を広範囲に使用し、Python ジェネレーターは BCW の例であり、木の森を見通すことができないのだろうか?
4 に答える
Haskell では、それらはどこにでもあります。
- Bは
<$>
- Cは
flip
- Kは
pure
- 私は
id
- Sは
<*>
- Wは
join
Haskell の観点からは、<$>
「コンテキスト内で実行する」ことを意味します。
(+2) <$> (*3)
は3 を掛けた後に 2 を足すことを意味します。(+2) <$> [1,2,3]
は、リスト内の各要素に2 を追加することを意味します。(+2) <$> (read . getLine)
は、今読んだ数字に2 を足すことを意味します。(+2) <$> someParser
は、解析したばかりの数値に2 を加算することを意味します。
コンテキストを持つものはファンクターと呼ばれます。すべての Java/Python/C++ イテレーターは、ファンクターの裏返しバージョンにすぎません。
別の接続: S と K コンビネータは一緒にチューリング完全です。Haskell ではpure
、<*>
一緒にアプリカティブ ファンクターを形成します。
もちろん、他のコンビネータがどのように適合するかを理解するには、Haskell を学ぶ必要があります。しかし、この例は、コンビネーターがいかに言語に定着しているかを示しています。
SKI 計算と BCKW 計算は、ラムダ計算 (関数型プログラミングの概念でよく知られているアプリケーション) とは一線を画しています。ポイントフリー形式であるためです。暗黙のプログラミングも参照してください。それらは、名前付き引数なしで関数型プログラムを構築する方法を理解するための基礎を形成します。
特定の言語 ( JoyやCatなど) での適用が見られます。私はLambda-the-Ultimate.orgに SK 微積分と Cat と Joy の関係について投稿したことがあります。
その価値について: BCKW と SKI (または SK) 計算は事実上同一ですが、BCKW の基礎は流行り廃りました。
ラムダ計算と SKI 計算は、ほとんどのプログラミング言語の入出力システム (グラフィックス、ネットワーク接続、またはおそらく標準入出力など) を反映していませんが、実際のコンピューター プログラミングの構造はラムダ (したがって、SKI とBCKW) など、再帰の考え方や関数の呼び出し方法など。これらのプログラミング言語の多くには、関数として使用するためのラムダ抽象化があります。