私は来年の秋にコンピュータサイエンスの学部課程を始めていますが、関数型プログラミングのコンテキストでのλ計算については本当に理解できません。私はこれを完全に誤解しているかもしれませんが、スタンフォード哲学百科事典のこの定義に基づくと、これは関数のもう1つの表記法です。
それは場合であることだけで、なぜそれが計算アルゴリズムの実行時に通常の関数表記上λ計算を使用するのが有利ですか?
私は来年の秋にコンピュータサイエンスの学部課程を始めていますが、関数型プログラミングのコンテキストでのλ計算については本当に理解できません。私はこれを完全に誤解しているかもしれませんが、スタンフォード哲学百科事典のこの定義に基づくと、これは関数のもう1つの表記法です。
それは場合であることだけで、なぜそれが計算アルゴリズムの実行時に通常の関数表記上λ計算を使用するのが有利ですか?
回答:
コンピュータサイエンスでは、ソースコードを数学的に厳密に分析して理解したいと考えています。これが、確実に確実に興味深い特性(終了など)を証明する唯一の方法です。そのためには、すべての構成要素に対して非常に明確に定義された意味を持つ言語が必要です。
理論的には、これは優れた正式なセマンティクスを持つ任意の言語である可能性があります。しかし、物事をそれほど複雑にせず、エラーを起こしにくくするために、できるだけ単純であるが、任意のプログラムを表現できる言語(つまり、チューリング完全)を使用するのが最善です。命令型コードについての推論のために、チューリングマシンがあります。しかし、関数型プログラミングについて推論するために、 -calculusがあります。
基本的な -calculusは関数型プログラミング言語に似ていますが、多くの「手荷物」が取り出されています。これが実際にプログラムを作成するのに適した言語であることも、効率的な言語であることも重要ではありません。シンプルで表現力があるというだけです。たとえば、ループは再帰でシミュレートできるため、ループは必要ありません。また、Curryingでシミュレートできるため、複数のパラメーターを持つ関数は必要ありません。
ここで、ある時点で、基本的な(型付けされていない) -calculusの一部ではない構成体のプロパティを証明したい場合があります。これが、コンピュータ科学者が長年にわたってさまざまな方向に拡張した理由です。たとえば、型システムを推論するために、型付き -calculiには非常に多くのバリエーションがあります。λ
不思議なことに、多くの本は微積分について、それに基づいた現代のプログラミング言語であるLispまたはSchemeについて言及せずに説明しているため、残念ながら、古くて抽象的でほとんど理論的なものであるという考えが学生に残されています。LispやSchemeを学ぶことは、微積分学を非常に理解するのに非常に役立ちます。λ
それは場合であることだけで、なぜそれが計算アルゴリズムの実行時に通常の関数表記上λ計算を使用するのが有利ですか?
Lispや関数型プログラミングを使用することには多くの利点があり、アルゴリズムの実行時間を計算することは1つの可能性にすぎません(ただし、そのための参照を引用すると役立つでしょう)。すでに関数記法になっているため、帰納または再帰関係を介して実行時の式を決定することにより、元のコードとの関係がより強くなるか、より明確になる場合があります。アルゴリズムの他のタイプの分析も単純化されています。
別の主な利点は、構文の単純さです。他の言語のパーサーは非常に複雑ですが、Lispパーサーは非常に単純です。Lispは構文解析の理論を研究するのに最適な言語です。
もう1つの重要な側面は、ソフトウェアを「コンピューター科学」の観点ではなく、論理的または数学的なレンズ/ビューから分析することです。
他の回答が指摘するように、Lispは反復ではなく再帰に関するものであり、再帰はCSの中心に非常にあります。
" -view"の詳細と詳細については、無料のオンラインで有名な参考文献[1]を参照してください。