it-swarm-eu.dev

Was ist der Ursprung und die Bedeutung des Ausdrucks "Lambda das Ultimative"?

Ich habe ein paar Jahre lang mit funktionalen Programmiersprachen herumgespielt und stoße immer wieder auf diesen Satz. Zum Beispiel ist es ein Kapitel von "The Little Schemer", das sicherlich älter ist als der Blog mit diesem Namen. (Nein, das Kapitel hilft nicht, meine Frage zu beantworten.)

Ich verstehe, was Lambda bedeutet, die Idee einer anonymen Funktion ist sowohl einfach als auch mächtig, aber ich verstehe nicht, was "das Ultimative" in diesem Zusammenhang bedeutet.

Orte, an denen ich diesen Satz gesehen habe:

  1. Der Titel von Kapitel 8 von The Little Schemer
  2. Ein Blog: http://lambda-the-ultimate.org/
  3. Eine Reihe von "Lambda the Ultimate X" -Papieren: http://library.readscheme.org/page1.html

Ich habe das Gefühl, dass mir hier eine Referenz fehlt. Kann mir jemand helfen?

44
Eric Wilson

Ja, es ist einfach eine wiederkehrende Phrase im Titel mehrerer Artikel, beginnend mit einem Paar in den 70er Jahren, in dem Sussman und Steele die Verwendung der Lambda-Rechnung für die Programmierung anhand eines minimalistischen LISP-Dialekts mit dem Namen " Schema" demonstrieren "sie haben für diesen Zweck entwickelt. Sie finden die Papiere selbst hier ; Sie sind interessant und überraschend relevant.

Ich bin mir nicht sicher, ob dies jemals explizit angegeben wird, aber es ist klar (aus dem Kontext, nachdem ich die Artikel gelesen habe und den allgemeinen Hintergrund und die Forschungsinteressen der Autoren kenne), dass der Satz einfach ein eingängiger Slogan für ihre Behauptung ist, dass Lambda-Abstraktionen sind als rechnerisches Grundelement nicht nur universell im formalen Sinne (in der Lage zu sein, ein Programm auf irgendeine Weise zu codieren, wie umständlich es auch sein mag), sondern universell in einem praktischen spüren, dass jedes in anderen Sprachen vorhandene Konstrukt, auch solche, die von Grund auf eingebrannt wurden, in einer Sprache auf Lambda-Basis auf eine Weise implementiert werden kann, die sowohl effektiv als auch natürlich zu verwenden ist.

Der wiederholte Satz führt zu der offensichtlichen verallgemeinerten Form "für alle X ist Lambda das ultimative X", was der Sinn ist, den ich allgemein als "Lambda the Ultimate" als Blognamen verstanden habe, wobei ich feststelle, dass sich LtU mit der Programmiersprache befasst Design und Theorie. Ironischerweise wäre LtU wahrscheinlich auch einer der besten Orte, um jemanden zu finden, der Ihnen etwas erzählen könnte, für das Lambda nicht die ultimative Implementierung ist. :]

Beachten Sie auch, dass Sussman einer der Autoren von SICP ist, einem sehr einflussreichen Lehrbuch, das auch die Schemasprache verwendet und viel Zeit damit verbringt, Lambda-Abstraktionen als einzuführen ein Konzept.

48
C. A. McCann

Lambda The Ultimate bezieht sich auf die Idee, dass die Lambdas des Lambda-Kalküls effektiv implementieren können alle eingebautes Konzept in jeder Programmiersprache, Vergangenheit, Gegenwart und Zukunft. Klassen, Module, Pakete, Objekte, Methoden, Kontrollfluss, Datenstrukturen, Makros, Fortsetzungen, Coroutinen, Generatoren, Listenverständnisse, Streams usw.

Diese ultimative Natur enthält steht für eine anonyme Funktion. Lambdas beschränken sich jedoch im Kern nicht nur auf anonyme Funktionen. Sie werden auf diese Weise unterrichtet, aber die Essenz von Lambda geht viel tiefer als mathematische Funktionen ohne Namen. Mit anderen Worten, ich habe Probleme mit:

Ich verstehe, was Lambda bedeutet, die Idee einer anonymen Funktion ist sowohl einfach als auch mächtig, aber ich verstehe nicht, was "das Ultimative" in diesem Zusammenhang bedeutet.

In der Praxis ist die Verwendung von Lambdas als syntaktische Abstraktionen ('Makros'), die nicht wertmäßig/anwendbar sind (welche mathematischen Funktionen es gibt), für den Kauf absolut entscheidend die Idee, dass Lambdas wirklich als Kern jedes Programmiersprachenverarbeitungssystems dienen können.

Für die Theorie: Es gibt einen interessanten Zusammenhang mit Bertrand Russells Paradoxon und den Axiomen des Verstehens (und der Erweiterung) in der naiven Mengenlehre. Ein Lambda soll funktionieren, was die Set-Builder-Notation für Mengen ist: Lambdas sind eine Funktions-Builder-Notation. Es gibt einen wichtigen Unterschied, der normalerweise ignoriert wird (Lambda (x) (* x x)) und dem, was daraus resultiert (die Funktion, die quadriert). Wenn man die beiden im Allgemeinen nicht unterscheidet, dh zwischen der Notation und der Bezeichnung (ein Fehler, den Church und Frege beide gemacht haben), dann stößt man auf Paradoxien. Für Sets und Frege ist es Bertrand Russells Barber of Seville, der den Fehler veranschaulicht. Für Funktionen und Kirche ist es Alan Turings Halting Oracle.

Beachten Sie, dass die Paradoxien gute, praktische Dinge sind. Wir möchten, dass EVAL ausdrückbar ist, und wir möchten, dass Lambdas mehr als nur Funktionen bedeuten. Die Annahme, dass das Gegenteil zum Widerspruch führt, ist das wünschenswerte Ergebnis; es dient als ein guter Gesundheitstest: Lambdas können kaum endgültig sein, wenn sie nur bloße Funktionen ausdrücken.


Racket (ehemals PLT Scheme) verfolgt weiterhin die Idee, dass praktische Programmiersprachen wirklich von Grund auf auf 'nur Lambda' aufgebaut werden können.

Kernel von Shutt argumentiert, dass Lambda nicht wirklich die ultimative Abstraktion ist. Er argumentiert, dass es noch ein primitiveres Konzept gibt (für Griechisch Vau genannt), das Sussman als FEXPR bekannt war.

Felleisin und Company (für Racket) erhalten einen Großteil der Leistung von Shutt's Vau, indem sie das Konzept von Phasen oder Metalebenen verwenden, was ungefähr bedeutet, dass der Quellcode mehrere Übersetzungsstufen durchläuft (wie bei der Vorverarbeitung) C, aber bei jedem 'Schritt' dieselbe Sprache verwenden, und die 'Schritte' sind zeitlich nicht ganz verschieden). (Sie argumentieren also, dass ein Lambda in einer höheren Phase einem Vau gut genug nahekommt.) Tatsächlich argumentieren sie, dass Phasen besser als FEXPRs sind, gerade weil sie begrenzter sind; Kurz gesagt, "FEXPRs sind zu mächtig" (siehe Wand's Arbeit, gegen die Shutt argumentiert).

Brian Smiths 3-LISP, "Prozedurale Reflexion in Programmiersprachen", versucht eine rigorose Neuformulierung der Theorie von LISP-ähnlichen Sprachen, indem Notationen (Symbole/Sprache/Programme) von Bezeichnungen (Dinge/Referenzen/Werte/Ergebnisse) scharf unterschieden werden ). http://dspace.mit.edu/handle/1721.1/15961

Mitchell Wand's "The Theory of FEXPRs is Trivial" schickt mehr Nägel in den (temporären?) Sarg, den Kent Pittman für FEXPRs hergestellt hat (der wie Felleisen gegen FEXPRs argumentiert, weil er die Zusammenstellung zu schwierig macht).

Paul Graham argumentiert mit Stärke und ausführlich in "On LISP", dass die wahre Kraft Lambdas als Transformatoren der Syntax (Makros) und nicht als Transformatoren der Werte (mathematische Funktionen) sind. Plotkins Entwicklung des anwendbaren Lambda-Kalküls könnte als etwas kontrastreich angesehen werden, da Plotkin den Kalkül der Kirche auf seine Teilmenge Call-by-Value/Applikative beschränkt. Natürlich ist es sehr wichtig, den anwendbaren Teil effizient zu handhaben, daher ist es wichtig, eine Theorie zu entwickeln, die auf diese Verwendung von Lambda spezialisiert ist. (Plotkin und Graham argumentieren nicht gegeneinander.)

Tatsächlich ist der Begriff Lambda als Ultimate im Allgemeinen nur eine solche Wendung in der ewigen Debatte zwischen Effizienz und Ausdruckskraft. Es ist die Position, dass Lambda das ultimative Werkzeug für Ausdruckskraft ist und sich bei ausreichender Untersuchung letztendlich auch als ultimatives Werkzeug für Effizienz erweisen wird. Mit anderen Worten, wenn wir wollen, können wir die Zukunft der Programmiersprachen als nicht mehr und nicht weniger als die Untersuchung betrachten, wie alle praktisch relevanten Fragmente des Lambda-Kalküls effizient implementiert werden können.

Landins "The Next 700 Programming Languages", http://www.cs.cmu.edu/~crary/819-f09/Landin66.pdf , ist eine zugängliche Referenz, die zur Entwicklung dieser Sprache beiträgt Konzept, dass Lambda Ultimate ist.

29
William Cushing

Ich denke, es ist einfach ein Verweis auf einige Artikel, die Sussman und Steele zwischen 1975 und 1980 geschrieben haben und die heißen:

  • Lambda: Der ultimative Imperativ
  • Lambda: Die ultimative Erklärung
  • Lambda: Das ultimative GOTO
  • LAMBDA: Der ultimative Opcode

Siehe Wikipedia-Artikel.

14