「究極のラムダ」というフレーズの起源と意味は何ですか?


43

私は数年前から関数型プログラミング言語をいじり続けてきましたが、このフレーズに出会っています。たとえば、これは「The Little Schemer」の章であり、これは確かにこの名前でブログに先行します(いいえ、この章は私の質問に答える助けにはなりません。)

私はラムダの意味を理解しています。匿名関数の概念はシンプルかつ強力ですが、このコンテキストで「究極」が何を意味するのか理解できません。

私がこのフレーズを見た場所:

  1. The Little Schemerの第8章のタイトル
  2. ブログ:http : //lambda-the-ultimate.org/
  3. 一連の「Lambda the ultimate X」ペーパー:http : //library.readscheme.org/page1.html

ここに参照がありませんが、誰か助けてもらえますか?


1
それは人気のブログの名前のように見えますが、別の歴史的な情報源がある場合、私は興味があります
...-クライム

1
このフレーズを見た場所への参照を提供できますか?そのコンテキストは、答えを見つけるのに非常に役立ちます。
アダムクロスランド

@Adam-いくつかの参照を追加しました。
エリックウィルソン

論文シリーズのリンクはcultureua.comにリダイレクトされます。誰かが最新のリンクを提供してください。
tejasbubane

回答:


47

はい、それは単にいくつかの論文のタイトルに繰り返されるフレーズです。70年代のカップルから始まり、SussmanとSteeleは、彼らが考案した「Scheme」という名前の最小限のLisp方言によって、ラムダ計算のプログラミングへの使用を実証します目的。あなたは見つけることができ、ここでの論文に自分自身を。それらは興味深く、驚くほど関連性があります。

これが明示的に述べられているかどうかはわかりませんが、(文脈から、論文を読んで、著者の一般的な背景と研究利益を知っていることから)フレーズがラムダ抽象化の主張のキャッチーなスローガンであることは明らかです、計算プリミティブとして、形式的な意味で何らかの普遍的である(何らかの方法でプログラムをエンコードすることはできますが)だけでなく、実用的な意味で普遍的であり、他の言語に存在するすべてのコンストラクトは、ゼロから焼き付けられたものは、ラムダベースの言語で効果的かつ自然に使用できる方法で再実装できます。

繰り返されるフレーズは、「すべてのXで、ラムダは究極のX」という明白な一般化された形式につながります。これは、一般に「Lambda the Ultimate」をブログ名として意味し、LtUはプログラミング言語に関係している設計と理論。皮肉なことに、LtUはおそらく、ラムダが究極の実装ではない何かを教えてくれる人を見つけるのに最適な場所の1つでしょう。:]

サスマンはの著者の一人であることにも注意してくださいSICP、また、Scheme言語を使用し、概念として時間導入ラムダ抽象の公正な量を費やしている非常に影響力の教科書。


2
これらの古典的な論文を見つけるために+1。 Guy L. Steele、Jr.Common LISPに関する本をほとんど書いています。LISPとSchemeは、JFortress、および他の言語に貢献し続けたGuyの道の終わりではありませんでした。Guyは、Jargon FileおよびHacker's Dictionaryにも関与していました。
ジョンTOBLER

@ジョン・トブラー:とてもそうです!Sussmanに焦点を当てたのは、Lambda Papersと深く結びついているSchemeにもっと関与しているように見えるためです。Steeleは他に何もしなかったという印象を与えるつもりはありませんでした。:]
CAマッキャン

28

Lambda The Ultimateは、ラムダ計算のラムダが、過去、現在、未来のすべてのプログラミング言語のすべての組み込み概念を効果的に実装できるという考えを指します。クラス、モジュール、パッケージ、オブジェクト、メソッド、制御フロー、データ構造、マクロ、継続、コルーチン、ジェネレーター、リスト内包表記、ストリームなど。

偶然にも、その究極の性質に、匿名関数の立場が含まれます。しかし、ラムダは、そのコアでは、匿名関数だけに制限されていません。彼らはそのように教えられますが、ラムダの本質は名前のない数学関数よりもはるかに深くなります。言い換えれば、私は問題を取ります:

私はラムダの意味を理解しています。匿名関数の概念はシンプルかつ強力ですが、このコンテキストで「究極」が何を意味するのか理解できません。

実際問題として、値による呼び出し/適用ではない(数学関数である)構文の抽象化(「マクロ」)としてラムダを使用することは、ラムダが本当にすべてのプログラミング言語処理システムのコア。

理論について:バートランドラッセルのパラドックスと素朴な集合論における理解の公理(および拡張)との興味深い関係があります。ラムダは、セットビルダー表記が設定する関数に対応します。ラムダは関数ビルダー表記です。(lambda(x)(* xx))と評価されるもの(二乗する関数)との間には、通常無視される重要な違いがあります。一般的に2つを区別できない場合、つまり、表記法と表記法(ChurchとFregeの両方が犯した間違い)を区別できない場合は、逆説に反します。セットとフレージュの場合、エラーを示すのはセビリアのバートランドラッセルの理髪師です。機能と教会のために、それはアラン・チューリングの停止オラクルです。

パラドックスは良い、実用的なものであることに注意してください。EVALは表現可能であり、ラムダは単なる関数以上のものを意味します。反対が矛盾につながると仮定することは望ましい結果です。これは、適切な健全性テストとして機能します。ラムダは単なる機能を表現するだけでは、究極のものになることはほとんどありません。


ラケット(以前のPLTスキーム)は、実用的なプログラミング言語は「ちょうどラムダ」上でゼロから構築できるという考えを引き続き訴追しています。

ShuttによるKernelは、ラムダは実際には究極の抽象化ではないと主張します。彼は、さらに原始的な概念(ギリシャ語ではvauと呼ばれる)があり、それはSussmanにFEXPRとして知られていました。

Felleisinと会社(Racketの場合)は、フェーズまたはメタレベルの概念を使用してShuttのvauのパワーの多くを取得します。 「ステップ」、および「ステップ」は実際には時間的に完全に区別されません)。(したがって、彼らは、より高い位相のラムダがvauに十分に近似していると主張します。)実際、彼らは位相がFEXPR より優れていると主張しています。要するに、「FEXPRは強力すぎます」(Shuttが反対しているWandの研究を参照)。

ブライアン・スミスの3-Lisp、「プログラミング言語の手続き的反映」は、表記法(記号/言語/プログラム)と表示(もの/参照元/値/結果)を明確に区別する線に沿って、LISPに似た言語の理論の厳密な再定式化を試みます)。http://dspace.mit.edu/handle/1721.1/15961

ミッチェル・ワンドの「The Theory of FEXPRs Trivial」は、Kent PittmanがFEXPRのために作成した(一時的な?)moreにさらに釘を送ります(Felleisenのように、FEXPRをコンパイルしすぎると主張する)。

ポール・グラハムは、「On Lisp」の強さと長さで、真の力は、値の変換(数学関数)ではなく、構文の変換(マクロ)としてのラムダであると主張しています。Plotkinの適用可能なラムダ計算の開発は、Plotkinがその値ごとの呼び出し/適用サブセットに教会の計算を制限しているため、いくぶん対照的であると考えることができます。もちろん、適用部分を効率的に処理することは非常に重要であるため、ラムダの使用に特化した理論を開発することが重要です。(PlotkinとGrahamは互いに反論しません。)

実際、一般的に、LambdaがUltimateであるという概念は、効率と表現力の間の永遠の議論に関するそのようなねじれにすぎません。それは、ラムダが表現力の究極のツールであり、十分な研究を考えると、最終的に効率の究極のツールであることが最終的に証明される立場です。言い換えれば、望むなら、プログラミング言語の未来を、ラムダ計算の実際に関連するすべての断片を効率的に実装する方法の研究にほかならないと考えることができます。

Landinの「The Next 700 Programming Languages」、http: //www.cs.cmu.edu/~crary/819-f09/Landin66.pdfは、LambdaがUltimateであるという概念の開発に役立つアクセス可能なリファレンスです。


ワオ。スタンディングオベーションに値する答え。従うべき多くの指針。
hmijail

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