ラムダ計算を研究に関連させるものは何ですか?


10

私は来年の秋にコンピュータサイエンスの学部課程を始めていますが、関数型プログラミングのコンテキストでのλ計算については本当に理解できません。私はこれを完全に誤解しているかもしれませんが、スタンフォード哲学百科事典のこの定義に基づくと、これは関数のもう1つの表記法です。

それは場合であることだけで、なぜそれが計算アルゴリズムの実行時に通常の関数表記上λ計算を使用するのが有利ですか?


5
「関数の単なる別の表記」ではなく、「関数の最初の表記」です。
Andrej Bauer

提案をありがとう、@ Kaveh。今後の投稿のために覚えておきますが、mhelvensの回答はすばらしいので、クロスポストは必要ありません。

正式に定義されたオブジェクトの本体です。あなたの正確な問題が何であるかわかりません。
ラファエル

ラムダ計算について学ぶまでは、用語や関数型プログラミングで行われている理由がよくわかりませんでした。これにより、ソフトウェアの構成が恣意的でなくなってきます。
dansalmo 2013

回答:


13

コンピュータサイエンスでは、ソースコードを数学的に厳密に分析して理解したいと考えています。これが、確実に確実に興味深い特性(終了など)を証明する唯一の方法です。そのためには、すべての構成要素に対して非常に明確に定義された意味を持つ言語が必要です。

理論的には、これは優れた正式なセマンティクスを持つ任意の言語である可能性があります。しかし、物事をそれほど複雑にせず、エラーを起こしにくくするために、できるだけ単純であるが、任意のプログラムを表現できる言語(つまり、チューリング完全)を使用するのが最善です。命令型コードについての推論のために、チューリングマシンがあります。しかし、関数型プログラミングについて推論するために、 -calculusがあります。λ

基本的な -calculusは関数型プログラミング言語に似ていますが、多くの「手荷物」が取り出されています。これが実際にプログラムを作成するのに適した言語であることも、効率的な言語であることも重要ではありません。シンプルで表現力があるというだけです。たとえば、ループは再帰でシミュレートできるため、ループは必要ありません。また、Curryingでシミュレートできるため、複数のパラメーターを持つ関数は必要ありません。λ

ここで、ある時点で、基本的な(型付けされていない) -calculusの一部ではない構成体のプロパティを証明したい場合があります。これが、コンピュータ科学者が長年にわたってさまざまな方向に拡張した理由です。たとえば、型システムを推論するために、型付き -calculiには非常に多くのバリエーションがあります。λλλ


3
いや、一部のコンピューターサイエンスはソースコードを理解することに関するものかもしれませんが、物理学と言っているように一般的にそう言えるのは、数学の厳密さでロケットを理解することです。コンピュータサイエンスは計算についてです。関連する不満は、効率の良いソースコードを研究したくない場合、言語の効率重要であることです。その意味で、TMは命令型言語のモデルよりも効率を考える方法として考える方が良いでしょう(両方の目的のために、単語RAMはより良い選択かもしれません)
Sasho Nikolov

ところで、私が上に書いたこと、私があなたの答えを好きではないことを意味しませ :)
Sasho Nikolov

同意した。;-) 修繕。
mhelvens 2013

1
チューリングマシンは命令型コードについて推論するのが非常に難しいため、単純なwhile型言語のようなおもちゃの言語を使用する方がはるかに簡単です。stackoverflow.com/questions/507310/the-while-language。チューリングマシンは、複雑性理論の洞察に非常に役立ちます。
cody 2013

1

不思議なことに、多くの本は微積分について、それに基づいた現代のプログラミング言語であるLispまたはSchemeについて言及せずに説明しているため、残念ながら、古くて抽象的でほとんど理論的なものであるという考えが学生に残されています。LispやSchemeを学ぶことは、微積分学を非常に理解するのに非常に役立ちます。λλλ

それは場合であることだけで、なぜそれが計算アルゴリズムの実行時に通常の関数表記上λ計算を使用するのが有利ですか?

Lispや関数型プログラミングを使用することには多くの利点があり、アルゴリズムの実行時間を計算することは1つの可能性にすぎません(ただし、そのための参照を引用すると役立つでしょう)。すでに関数記法になっているため、帰納または再帰関係を介して実行時の式を決定することにより、元のコードとの関係がより強くなるか、より明確になる場合があります。アルゴリズムの他のタイプの分析も単純化されています。

別の主な利点は、構文の単純さです。他の言語のパーサーは非常に複雑ですが、Lispパーサーは非常に単純です。Lispは構文解析の理論を研究するのに最適な言語です。

もう1つの重要な側面は、ソフトウェアを「コンピューター科学」の観点ではなく、論理的または数学的なレンズ/ビューから分析することです。

他の回答が指摘するように、Lispは反復ではなく再帰に関するものであり、再帰はCSの中心に非常にあります。

" -view"の詳細と詳細については、無料のオンラインで有名な参考文献[1]を参照してください。λ

[1] Abelson&Sussmanによるコンピュータプログラムの構造と解釈

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.