質問

ご存知の皆様へ ラムダ計算:プログラミングに関して、それによってどのようなメリットが得られましたか?人々にそれを学ぶことを勧めますか?

役に立ちましたか?

解決

何かでプログラムしたい場合は、 関数型プログラミング言語, 、それは不可欠です。つまり、チューリング マシンについて知ることがどれほど役立つのでしょうか?C を書く場合、言語パラダイムはチューリング マシンに非常に近くなります。命令ポインタと現在の命令があり、マシンは現在の状態で何らかのアクションを実行し、その後次の命令に進みます。

関数型言語では、そのように考えることはできません。それは言語パラダイムではありません。ラムダ計算と、そこで項がどのように評価されるかを思い出してみる必要があります。ラムダ計算を知らなければ、関数型言語を効果的に使用するのははるかに困難になります。

他のヒント

ラムダ計算の利点は、チューリング マシンと同等の非常に単純な計算モデルであることです。ただし、チューリング マシンはアセンブリ言語に近いのに対し、ラムダ計算は高級言語に似ています。そして、学べば 教会のエンコーディング と呼ばれるプログラミング手法を学ぶのに役立ちます。 継続渡しスタイル, これは、バックトラッキング検索やその他の巧妙なトリックを実装するのに非常に役立ちます。

実際のラムダ計算の主な用途は次のとおりです。 新しいプログラミング言語のアイデアを研究するための優れた実験ツールです。. 。新しい言語機能のアイデアがある場合は、 ラムダ計算に新しい機能を追加します そしてあなたは何かを手に入れます プログラミングするのに十分な表現力 いる間 シンプルなので徹底的に勉強できる. 。この用途は実際にはプログラマよりも言語設計者や理論家向けです。

ラムダ計算は、それ自体が非常に優れています。アセンブリ言語を知るのと同じように、 計算についての理解を深める. 。特に楽しいのは、 万能チューリングマシンをプログラムする ラムダ計算では。ただし、これは基礎的な数学であり、実践的なプログラミングではありません。

正直に言うと、関数型プログラミングの前にラムダ計算を学んだことで、C が命令型プログラミングと同様に、この 2 つが無関係であることがわかりました。

ラムダ計算というのは、 ある 関数型プログラミング言語、難解なもの、好みに応じてチューリング ターピットなど。偶然にもそれが最初です。

大多数の関数型プログラミング言語では、ラムダ計算を「学習」する必要はまったくありません。それが何を意味するにせよ、ラムダ計算は非常に最小限であり、その公理を 1 時間以内に「学習」できます。そこからの結果を知るには、不動点定理と同様、チャーチ・ロッサー定理などは関数型プログラミングとは無関係です。

また、ラムダ抽象化は「関数」であると考えられることがよくありますが、私はそれに同意しません。ラムダ抽象化は関数ではなくアルゴリズムです。小さな違いですが、ほとんどの「関数型言語」は関数を古典数学と同じように扱います。

ただし、たとえば Haskell を効果的に使用するには、次のことを理解する必要があります。 型システム, 、これはラムダ計算とは関係なく、System F 型システムはすべての「関数」に適用でき、ラムダ抽象化をまったく必要としません。一般に数学では f と言います。R^2 -> R :f (x) = x^2。次のように言うこともできたはずです。f (x) = x^2 ::R→R→R。実際、Haskell はこの表記法にかなり近いものです。

ラムダ計算は理論的形式主義であり、Haskell の関数は実際には f と同じ「ラムダ抽象化」ではありません。f(x) = x^2 実際のところ、ラムダ抽象化が興味深いのは、通常「定数」と見なされるものを「関数」として定義できることです。膨大な計算オーバーヘッドのため、これを行う関数型言語はありません。Haskell などは System F の制限された形式にすぎません 型システム 日常の古典数学で使用される関数に適用されます。Haskell の関数は、ラムダ計算のような匿名の形式的記号還元適用者ではありません。ほとんどの関数型プログラミング言語は、記号削減ベースの書き換えシステムではありません。Lisp もある程度はそうですが、それ自体がパラダイムであり、その「ラムダ キーワード」は実際にはラムダ計算と呼ぶには不十分です。

実際のプログラミングに関するラムダ計算の使用は、ラムダ計算が抽象化 (あるいは、「匿名関数」またはクロージャ) の本質を捉える非常に最小限のシステムであるということだと思います。それ以外は、(Tetha のように) 自分で抽象化を実装する必要がある場合を除いて、一般的には必須ではないと思います。114646) 言及された)。

私もデニス・ブエノの意見には完全に反対です(114701)関数型プログラミングには必須だと言っている人。ラムダ計算をまったく行わずに関数型言語を定義、使用、または理解することは完全に可能です。関数型言語の項の評価 (私の意見では、これは関数型言語の使用と多少矛盾します) を理解するには、項書き換えシステムについて学ぶ方がよいでしょう。

ラムダ計算を学ばなくても関数型プログラミングを学ぶことは理論的には可能だという意見には私も同意しますが、その利点は何でしょうか。 ない ラムダ微積分を勉強していますか?それほど大きな時間の投資がかかるわけではありません。

おそらく、関数型プログラミングをより深く理解するのに役立ちます。しかし、たとえそうでなかったとしても、それは学ぶ価値のある素晴らしいことです。の Y コンビネーター 美しいものです。

技術者になり、何かを行うためのプログラムを書きたいだけであれば、ラムダ計算、有限状態マシン、プッシュダウン オートマトン、正規表現、文脈自由文法、離散数学などを知る必要はありません。

しかし、このものの根底にある深い謎に興味があるなら、これらの質問がどのように答えられるのか疑問に思うかもしれません。コンセプトは美しく、想像力を広げます。また、ついでに言えば、それらは人をより良い実践者にしてくれるとも思います。

私が夢中になったのは、ミンスキーの『Computation』という本でした。有限マシンと無限マシン。

ラムダ計算は、チューリング マシンと同様の計算モデルです。したがって、このモデルに基づいて言語の特定の評価器を実装する必要がある場合には便利ですが、実際に必要なのは基本的なアイデアだけです (ええと、引数を関数の本体に意味的に正しく配置しますか?)、それだけです。

ラムダ計算を学ぶための 1 つの可能な方法は次のとおりです。

http://en.wikipedia.org/wiki/Lambda_Calculus

さらに詳しく知りたい場合は、ラムダ微積分などに特化した私のブログをご覧ください。

http://weblogs.manas.com.ar/lziliani/

計算のあらゆる抽象化と同様に、ラムダ計算を使用すると、サブタイプなど、ほとんどのプログラミング言語で使用されるものをモデル化できます。これについて詳しくは、この意味でのラムダ計算の実践的な使い方を記載した最良の本の 1 つが次の本です。

http://www.amazon.com/Types-Programming-Languages-Benjamin-Pierce/dp/0262162091/ref=sr_1_1?ie=UTF8&s=books&qid=1222088714&sr=8-1

関数型プログラミングがより深いレベルでどのように機能するかを理解するには、ラムダ計算が役立つことがわかりました。特に関数型言語を実装する方法。

これにより、型システムや評価戦略などの高度な概念を理解することが容易になりました (例:名前による呼び出しと値による呼び出し)。

基本的な関数プログラミング手法を使用するために、ラムダ計算について何も知る必要はないと思います。しかし ラムダ計算を理解すると、高度なプログラミング理論の学習が容易になります.

NLP の分野で何かをしている場合、ラムダ計算は構成意味論における膨大な作業の基礎であることにも触れておきたいと思います。

私にとっての利点は、よりコンパクトな相乗的プログラミングです。物は垂直よりも水平に流れる傾向があります。さらに、単純なアルゴリズムのプロトタイピングにも非常に役立ちます。最大限に活用できているかどうかはわかりませんが、非常に便利だと思います。

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