Ich habe ein paar Jahre lang mit funktionalen Programmiersprachen rumgespielt und stoße immer wieder auf diesen Satz. Zum Beispiel handelt es sich um ein Kapitel von "Der kleine Schemer", das dem Blog mit diesem Namen zweifellos vorausgeht. (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 Kontext bedeutet.
Orte, an denen ich diesen Satz gesehen habe:
- Der Titel von Kapitel 8 des Kleinen Schemer
- Ein Blog: http://lambda-the-ultimate.org/
- Eine Reihe von "Lambda the ultimate X" -Papieren: http://library.readscheme.org/page1.html
Ich habe das Gefühl, hier fehlt mir eine Referenz. Kann mir jemand helfen?
functional-programming
terminology
history
lambda
Eric Wilson
quelle
quelle
Antworten:
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-Berechnung für die Programmierung anhand eines minimalistischen Lisp-Dialekts mit dem Namen " Scheme " demonstrieren, für den sie sich entschieden haben die Absicht. Die Papiere finden Sie 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 Ausdruck einfach ein eingängiger Slogan für ihre Behauptung ist, Lambda-Abstraktionen Als ein rechenprimitives Element sind sie nicht nur im formalen Sinne universell (dh sie können jedes Programm auf irgendeine Weise codieren, wie umständlich sie auch sein mögen), sondern im praktischen Sinne universell , so wie jedes Konstrukt in anderen Sprachen vorhanden ist, auch in jenen, die es sind Von Grund auf eingebrannt, kann in einer Lambda-basierten Sprache auf effektive und natürliche Weise umgesetzt werden.
Der wiederholte Ausdruck führt zu der offensichtlichen verallgemeinerten Form "für alle X, Lambda ist das ultimative X", was der Sinn ist, den ich allgemein als den Blognamen "Lambda das ultimative" genommen habe, wobei angemerkt wird, 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ählt, 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 Scheme-Sprache verwendet und viel Zeit damit verbringt, Lambda-Abstraktionen als Konzept einzuführen.
quelle
Lambda The Ultimate bezieht sich auf die Idee, dass die Lambdas von Lambda-Calculus jedes eingebaute Konzept in jeder Programmiersprache, Vergangenheit, Gegenwart und Zukunft effektiv implementieren können. Klassen, Module, Pakete, Objekte, Methoden, Kontrollfluss, Datenstrukturen, Makros, Fortsetzungen, Coroutinen, Generatoren, Listenverständnisse, Streams und so weiter.
Zu dieser letztendlichen Natur gehört es natürlich, für eine anonyme Funktion einzutreten. Aber Lambdas sind im Kern nicht nur auf anonyme Funktionen beschränkt. 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:
Aus praktischer Sicht ist die Verwendung von Lambdas als syntaktische Abstraktionen ("Makros"), die nicht nach Wert aufrufbar / anwendbar sind (welche mathematischen Funktionen sind), von entscheidender Bedeutung, um die Idee zu akzeptieren, dass Lambdas tatsächlich als solche dienen können Kern eines jeden Programmiersprachen-Verarbeitungssystems.
Für die Theorie: In der naiven Mengenlehre besteht eine interessante Verbindung zu Bertrand Russells Paradoxon und den Axiomen des Verstehens (und der Erweiterung). Ein Lambda ist eine Funktion, was eine Mengenerstellungsnotation für Mengen ist: Lambdas sind eine Funktionserstellungsnotation. Es gibt einen wichtigen Unterschied, der normalerweise ignoriert wird, zwischen (Lambda (x) (* xx)) und dem, was daraus resultiert (die Funktion, die quadriert). Wenn man im Allgemeinen nicht zwischen den beiden unterscheidet, dh zwischen der Notation und der Bezeichnung (ein Fehler, den Church und Frege beide gemacht haben), dann hat man mit Paradoxen zu kämpfen. Bei Sets und Frege ist es Bertrand Russells Barber of Seville, der den Fehler veranschaulicht. für Funktionen und Kirche ist es Alan Turing's Halting Oracle.
Beachten Sie, dass die Paradoxien gute, praktische Dinge sind. Wir möchten, dass EVAL zum Ausdruck kommt, und Lambdas sollen mehr als nur Funktionen bedeuten. Die Annahme, dass das Gegenteil zu Widersprüchen führt, ist das erstrebenswerte Ergebnis. es dient als netter Gesundheitstest: Lambdas können kaum ultimativ sein, wenn sie nur bloße Funktionen ausdrücken.
Racket (ehemals PLT-Schema) 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 einen primitiveren Begriff gibt (für Griechisch, genannt Vau), der 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 Metaebenen verwenden. Dies bedeutet ungefähr, dass der Quellcode mehrere Übersetzungsstufen durchlaufen muss (wie bei Preprocessing C, aber jeweils in derselben Sprache) 'step' und die 'steps' sind zeitlich nicht völlig verschieden). (Also argumentieren sie, dass ein Lambda in einer höheren Phase gut genug einem Vau 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 der 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 Wands "The Theory of FEXPRs is Trivial" wirft mehr Nägel in den (temporären?) Sarg, den Kent Pittman für FEXPRs herstellte (der wie Felleisen gegen FEXPRs argumentiert, die Kompilierung zu schwierig zu machen).
Paul Graham argumentiert mit Nachdruck und ausführlich in "On Lisp", dass die wahre Kraft Lambdas als Syntaxtransformatoren (Makros) und nicht als Werttransformatoren (mathematische Funktionen) sind. Plotkins Entwicklung des applikativen Lambda-Kalküls könnte als etwas kontrastierend angesehen werden, da Plotkin den Kalkül von Church auf seine Call-by-Value / applikative Teilmenge beschränkt. Natürlich ist es sehr wichtig, den anwendungsbezogenen Teil effizient zu handhaben. Daher ist es wichtig, eine Theorie zu entwickeln, die auf die Verwendung von Lambda spezialisiert ist. (Plotkin und Graham streiten sich nicht.)
Tatsächlich ist die Vorstellung von Lambda als Ultimate nur eine solche Wendung in der ewigen Debatte zwischen Effizienz und Ausdruckskraft. es ist die position, dass lambda das ultimative instrument für ausdruckskraft ist und sich bei ausreichender studie letztendlich auch als ultimatives instrument für effizienz erweisen wird. Mit anderen Worten, wir können, wenn wir wollen, die Zukunft der Programmiersprachen als nicht mehr und nicht weniger als das Studium betrachten, wie alle praktisch relevanten Fragmente des Lambda-Kalküls effizient implementiert werden können.
Landins "Die nächsten 700 Programmiersprachen", http://www.cs.cmu.edu/~crary/819-f09/Landin66.pdf , ist eine barrierefreie Referenz, die zur Entwicklung des Konzepts beiträgt, dass Lambda Ultimate ist.
quelle
Ich denke, es ist nur ein Hinweis auf einige Artikel, die Sussman und Steele zwischen 1975 und 1980 verfasst haben:
Siehe Wikipedia-Artikel.
quelle