anonyme Lambda-Funktionen (funktionale Programmierung)

10

Was sind anonyme (Lambda) Funktionen? Was ist die formale Definition einer anonymen Funktion in einer funktionalen Programmiersprache?

In meinen einfachen Worten, wenn ich in Schema / Lisp programmiere, würde ich sagen, dass eine anonyme (Lambda) Funktion eine Funktion ist, die nicht an einen Bezeichner gebunden ist.

Ist das alles, was Sie formal über eine Lambda-Funktion sagen können? Ich denke, es gibt mehr Details, die zu dieser einfachen Definition hinzugefügt werden können. Bitte erläutern Sie und danke!

CodeKingPlusPlus
quelle
2
Haben Sie gesehen, was der Sinn von Lambda im Schema ist?
Guy Coder

Antworten:

10

Meiner Meinung nach ist das alles, was man wirklich über sie sagen kann.

Die Idee ist, dass in einer Sprache höherer Ordnung eine Funktion nur eine andere Art von Wert ist. Genauso wie Sie (3 + 4) ohne Bezeichner in C haben können, können Sie (Lambda (x) + (3 x))) ohne Bezeichner im Schema haben.

Der Schlüssel hier ist nicht, dass anonyme Funktionen etwas Besonderes sind. Nur die Einschränkungen anderer Sprachen erfordern, dass Funktionen anders behandelt werden als andere Werte. Die speziellen Definitionen gelten für prozedurale Sprachen, die sie nicht zulassen, nicht für funktionale Sprachen mit do.

jmite
quelle
11

In der Lambda-Rechnung sind alle Funktionen (Begriffe) anonym. Dies ist eine wesentliche Eigenschaft des Lambda-Kalküls: Sie können komplexe Funktionen aus einfacheren zusammensetzen, ohne ihnen Namen zu geben.

In Programmiersprachen ist es in den meisten Fällen wünschenswert, Funktionen Namen zu geben, da wir so denken und Code für Menschen lesbar machen. Beim Kompilieren werden jedoch die Namen beim Erstellen einer ausführbaren Datei entfernt (wenn Debugging-Informationen nicht berücksichtigt werden).

Wenn eine Sprache das Ausdrücken anonymer Funktionen (dh Funktionen ohne Namen) zulässt, kann dies sowohl Programmierern als auch Compilern einen Vorteil verschaffen: Programmierer können häufig kürzeren Code schreiben, und Compiler können besser optimieren, da sie wissen, dass eine anonyme Funktion nur bei der angegebenen Funktion verwendet wird Ort und nirgendwo anders.

Petr Pudlák
quelle
1

Es hängt davon ab, welchen Teil Ihrer Frage Sie hervorheben. Wenn es speziell die Eigenschaft ist, für anonyme Funktionen anonym zu sein, besteht die einzige Antwort darin, dass es sich um ungebundene Werte handelt . Wenn Sie über Funktionen im Allgemeinen sprechen, sind anonyme Funktionen wahrscheinlich die sichtbarste Manifestation der Verwendung von Lambda-Kalkül in einer funktionalen Umgebung für anwendungsbezogene Sprachen .

Tatsächlich sind Lambda-Ausdrücke aus Sicht der Lambda-Berechnung das sehr syntaktische Konstrukt, das zum Erstellen von Bindungen verwendet wird. Erinnern Sie sich an die im Lambda-Kalkül verwendete Notation:

λf.λx.fx

fxfx

Eine Sprache bietet normalerweise Möglichkeiten wie let(ML wie Sprachen, Schema) oder define(Schema), um Bindungen zu erstellen, die auf der obersten Ebene (oder in syntaktischen Konstrukten, die komplexer sind als Funktionen wie Module oder Objekte) verwendet werden können, aber das einzig benötigte Werkzeug für Bindungen ist das Lambda auf niedrigeren Ebenen.

Wenn Sie sich Sprachen wie Schema- oder Lisp-Dialekte ansehen, ist ihre Grundlage Lambda-Kalkül, und viele spezielle Formen sind wirklich mit Zucker überzogene Lambdas.

Bei verketteten Sprachen ist die Geschichte etwas anders. Lambdas sind nicht notwendig und tatsächlich kontraproduktiv. Was bringt es, anonyme Lambdas zu definieren, wenn alles eine Funktion ist ?

Es gibt irgendwie eine Dualität zwischen diesen beiden Arten von Sprachen. Letzteres konzentriert sich auf die punktfreie Funktionskombination und versucht daher, alles als Funktionen darzustellen, während Ersteres an einem ausgefeilteren Kalkül arbeitet und sich bemüht, Funktionen wie erstklassige Werte wie alle anderen Werte der Sprache zu haben. In dieser Hinsicht konnte man Lambdas als Ergebnis dieser Bemühungen sehen.

Einige Hinweise zu dem in dieser Antwort (schlecht) eingeführten Thema:

didierc
quelle