質問

私は来年秋に学部のコンピューターサイエンスコースを始めていますが、機能的なプログラミングの文脈でλ-銅を本当に理解することはできません。私はこれを完全に誤解しているかもしれませんが、これに基づいて 意味 哲学のスタンフォード百科事典から、それは機能の別の表記法です。

それであれば それだけで、なぜ通常の関数表記でλ-カルクルスを使用してアルゴリズムの実行時間を計算することが有利なのですか?

役に立ちましたか?

解決

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

理論的には、これは良い言語である可能性があります 正式なセマンティクス. 。しかし、物事をより複雑ではなく、エラーの発生を受けにくくするには、可能な限り単純であるが、それでもプログラムを表現できる言語を使用するのが最善です(つまり、ISは チューリング完全)。命令的なコードに関する推論のために、あります チューリングマシン. 。しかし、機能的なプログラミングに関する推論のために、$ lambda $ -calculusがあります。

基本的な$ lambda $ -calculusは、機能的なプログラミング言語のようなものですが、多くの「荷物」が取り出されています。これが実際にプログラムを書くのに良い言語であることも、効率的な言語であることは重要ではありません。それがシンプルで表現力豊かなことだけです。たとえば、ループは再帰でシミュレートできるため、ループは必要ありません。そして、複数のパラメーターを持つ関数は必要ありません。 カリー.

現在、ある時点で、基本的な(Untyped)$ lambda $ -calculusの一部ではない構造に関する特性を証明することができます。そのため、コンピューターの科学者は長年にわたってさまざまな方向に拡張してきました。たとえば、タイプシステムについて推論するために、非常に多くのバリエーションがあります $ lambda $ -calculiと入力しました.

他のヒント

奇妙なことに、多くの本が言及せずに$ lambda $ qualculusについて話します 舌足らずの発音 また 図式, 、それに基づいた最新のプログラミング言語であり、残念ながら学生はその古い抽象的でほとんど理論的であるという考えを残します。 LISPまたはスキームを研究することは、$ Lambda $ Calculusを理解するのに非常に役立つ大きな角度です。

それであれば それだけで、なぜ通常の関数表記でλ-カルクルスを使用してアルゴリズムの実行時間を計算することが有利なのですか?

LISPまたは機能的なプログラミングを使用し、アルゴリズムの実行時間を計算することには多くの利点があります(ただし、REFを引用した場合は役立ちます)。すでに機能的な表記法であるため、誘導または再発関係を介して実行時間の式を決定することがあるため、元のコードとより強いまたはより明白な関係がある場合があります。アルゴリズムの他のタイプの分析も簡素化されています。

もう1つの主な利点は、構文的なシンプルさです。他の言語のパーサーは非常に複雑ですが、LISPパーサーは非常に簡単です。したがって、Lispは、解析の理論を研究するのに最適な言語です。

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

他の答えが指摘しているように、Lispは反復の代わりに再帰に関するものであり、再帰はCSの中心にあります。

「$ lambda $ -View」と詳細の詳細については、[1]、無料のオンラインおよびセミファンシャスREFにあります。

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

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