質問

私は大学の学生であり、現在はラムダ計算を勉強しています。しかし、私はまだこれが私にとって役立つ理由を正確に理解するのに苦労しています。機能的なプログラミングがたくさんあると便利かもしれませんが、機能的なプログラミングの学習には本当に必要ではないと思いますが、どう思いますか?

第二に、コンピューターサイエンスの領域内では、機能的なプログラミング言語以外のラムダ計算には使用できますか?

役に立ちましたか?

解決

ラムダ計算は、論理、カテゴリ理論、タイプ理論、正式な検証などの基本です...基本的に、プログラミング言語セマンティクスと正式な論理に関係しています。これらの分野で働く人々がその利点さえ疑問に思わないのは、非常に基本的な形式主義です。

機能的なプログラミングの本質を提供するため、機能的なプログラミングを理解するのに非常に役立つと思います。関数、アプリケーション、代替。これに基づいて、機能的なプログラムとそれらの変革に関する推論においてスキルを築くことができます。高次関数は簡単です。

確かに、Lambda計算なしで機能的なプログラミングを学ぶことができますが、それなしでは機能的なプログラミングを本当に理解することはありません。

他のヒント

コンピューターサイエンスとロジック以外のアプリケーションを求めています。これは簡単に見つかります。たとえば、代数トポロジーでは、デカルト閉じたカテゴリのスペースを持っていると便利です。 トポロジスペースの便利なカテゴリ nlabで。デカルト閉じたカテゴリに対応する正式な言語は、まさに$ lambda $ -calculusです。これがどのように役立つかを非常に簡単な例で説明させてください。

まず、ウォームアップ演習として、$ f: mathbb {r} to mathbb {r} $ $ f(x)= x^2 e^x + log(1 + ofで定義されているかどうかが誰かがあなたに尋ねるとします。 x^2)$は微分可能です。あなたは実際にそれがあることを証明する必要はありません、あなたはそれが微分可能な機能の構成であり、したがって微分可能であることを観察するだけです。言い換えれば、あなたはに基づいて簡単に結論を出しました 定義の。

さて、実際の例については。誰かが関数$ f: mathbb {r} to mathbb {r} $ $$ f(x)= left( lambda f: mathcal {c}( mathbb {r}( )繰り返しますが、関数は$ lambda $ -calculusを使用して定義され、連続マップ$ max $、$ int $、$ sin $などから始まるため、すぐに「はい」に答えることができます。

$ lambda $ -calculusのさまざまな拡張により、他の領域で同じ種類のことを行うことができます。たとえば、a 滑らかなトポス は、デリバティブとリアルのリング構造から始まる$ lambda $ -calculusを使用して定義されているカテリニア閉じたカテゴリであり、任意のマップ(そして、希望する場合は指数関数を投げることができます)は自動的に滑らかです。 (実際、滑らかなトポスの主な推進力は、「私たちはディスクを無限に薄い同胞子の三角形に病気にする」などのことを意味のあることを言うことができるnilpotent Infinitesimalsの存在です。)

$ lambda $ -calculusを見る1つの方法は、パラメータープログラムのシンプルで簡潔なモデルとしてです。パラメーターコードは、関数、手順、またはメソッドを備えたほぼすべてのプログラミング言語、およびモジュールを備えた、またはパラメーター化タイプを可能にする任意の言語でコードをパラメーター化します。パラメーター化は再利用の一形態です。 $ lambda $ -calculusは非常に単純であるため、パラメーター化コードを可能にする多くのプログラミング言語間の共通性は、特に明確に前面に出ます。

$ lambda $ -calculusについて知らずに非常に優れたプログラマーになることは確かに可能ですが、あなたも非常に便利な美しいものを逃しています。

Microsoft LINQ(言語統合クエリ)機能プログラミング機能は、手続き型言語に移植されます。 $ lambda $ -calculusを広範囲かつ非常に直接使用して、依存関係を解き、データベースサーバーに委任できる式ツリーの一部を分離します。これは、商業的価値が高い非常に実用的なアプリケーションです。

私は機能的な言語を使用して小さな商業アプリケーションを書いていますが、学者や研究者にとっては、手続き上のいとこよりも商業的にはあまり有用ではないことを保証できます。本当にそれはコースの馬の問題であり、何よりも最も実用的なのは、必要に応じて手続き的または機能的であることができる言語です。結果として、$ lambda $ expressionsなどのLinqをサポートするために(C#に)導入された機能能力は、データベースクエリのコンテキスト以外で非常に多くの使用を取得します。

だから、あなたが最終的に自分が厄介なことをしなければならないことに気付いたとき、あなたは支払いを望んでいるので、あなたはほぼ確実にあなたが予想していたよりも$ lambda $ -calculusがあなたが予想していたよりも便利であることがあるかもしれません しない 機能的な言語を使用しています。

それについてもっと知らずに、言語学者がラムダ計算を使用していると聞きました。

http://www.sfu.ca/~jeffpell/ling406/lambdaabstractionoh.pdf, https://files.nyu.edu/cb125/public/lambda/

ライセンス: CC-BY-SA帰属
所属していません cs.stackexchange
scroll top