Was ist ein Lambda?


93

Könnte jemand eine gute Beschreibung geben, was ein Lambda ist? Wir haben ein Tag für sie und sie sind auf den Geheimnissen der C # -Frage, aber ich muss noch eine gute Definition und Erklärung finden, was sie überhaupt sind.



2
mögliches Duplikat von Was ist ein Lambda (Funktion)?
Nawfal

Amda Ausdruck hier wunderschön erklärt .
Jameer Mulani

Antworten:


135

Verschlüsse, Lambdas und anonyme Funktionen sind nicht unbedingt dasselbe.

Eine anonyme Funktion ist eine Funktion, die keinen eigenen Namen hat (oder zumindest benötigt).

Eine Schließung ist eine Funktion , die Variablen , die waren in ihrem lexikalischen Gültigkeitsbereich zugreifen kann , wenn sie erklärt wurde, auch nachdem sie gefallen sind , aus dem Umfang. Anonyme Funktionen müssen nicht unbedingt Schließungen sein, sie sind jedoch in den meisten Sprachen verfügbar und werden weniger nützlich, wenn sie nicht vorhanden sind.

Ein Lambda ist in Bezug auf die Informatik nicht ganz so gut definiert. Viele Sprachen verwenden den Begriff nicht einmal. Stattdessen nennen sie sie einfach Closures oder Anon-Funktionen oder erfinden ihre eigene Terminologie. In LISP ist ein Lambda nur eine anonyme Funktion. In Python ist ein Lambda eine anonyme Funktion, die speziell auf einen einzelnen Ausdruck beschränkt ist. Alles andere, und Sie benötigen eine benannte Funktion. Lambdas sind Verschlüsse in beiden Sprachen.


Der Begriff könnte bedeuten, Lambda-Kalkül zu implizieren. en.wikipedia.org/wiki/Lambda_calculus
Steven A. Lowe

Wow, ich hatte mehr als eine Gegenstimme, um diese Frage zu stellen. Ich habe so viele technische Antworten gesehen, die in der Terminologie festgefahren sind, aber diese ist prägnant und macht den Punkt sofort klar.
Matthew Stopa

8
+1, wenn der Begriff "Schließen" nicht verwendet wird, um einen Abschluss so zu definieren, als würde er klarer.
Daniel

5
Eine Region, in der eine Variable existieren kann (dh ein Bereich), die durch die Struktur Ihres Codes definiert ist (dh lexikalisch). In den meisten Sprachen definiert eine Funktion beispielsweise einen lexikalischen Bereich. Auf jede innerhalb der Funktion deklarierte Variable kann außerhalb der Funktion nicht zugegriffen werden.
Eevee

19

Auch Schließungen oder anonyme Funktionen genannt. Die beste Beschreibung habe ich hier gefunden . Grundsätzlich Inline-Codeblock, der als Argument an eine Funktion übergeben werden kann.



8

Es handelt sich lediglich um eine anonyme Funktion, die als Inline deklariert wurde und normalerweise einem Delegaten zugewiesen wird, wenn Sie keine vollwertige Funktion schreiben möchten.

In Sprachen wie lisp / Schema werden sie häufig recht großzügig als Funktionsparameter herumgereicht, aber die Redewendung in C # findet normalerweise Lambdas, die nur zur verzögerten Auswertung von Funktionen wie in linq verwendet werden oder um den Code für die Ereignisbehandlung etwas knapper zu machen.


5

Es gibt nicht wirklich so etwas wie ein Lambda in der Programmierung. Das hängt von der Sprache usw. ab.

Kurz gesagt, normalerweise verwendet eine Sprache, die Lambdas hat, den Begriff für anonyme Funktionen oder in einigen Fällen für Schließungen. So in Ruby:

f = lambda { return "this is a function with no name" }
puts f.call

4

Antwort auf die vorherigen Antworten:
- Das Wichtige an anonymen Funktionen ist nicht, dass sie keinen Namen benötigen.
-Verschlüsse sind ein separates Konzept.
- Ein gigantischer Wikipedia-Artikel macht dies nicht klarer.

Hier ist meine Antwort in 3 Teilen:
1. Ein Lambda ist eine Funktion, die auch ein Ausdruck ist. Das ist das Wichtige.
2. Viele Sprachen, die sogenannte "Lambdas" implementieren, fügen etwas syntaktischen Zucker hinzu , um das Schreiben dieser kurzen Funktionen einfacher und schneller zu machen. Dies ist jedoch nicht erforderlich.
3. Einige Sprachen erfordern möglicherweise, dass ein Lambda keine Nebenwirkungen hat . Das wäre ein reineres Lambda im funktionalen Sinne.

Wenn eine Funktion ein Ausdruck ist, ist sie ein "erstklassiger Bürger" innerhalb der Sprache. Ich kann alle wichtigen Dinge damit machen:

x = lambda(){ return "Hello World"; }

doit( 1, 2, lambda(a,b){ return a > b; }, 3 )

x = (lambda(a){ return a+1; }) + 5  // type error, not syntax error

(lambda(a,b){ print(a); log(b); })( 1, 2 )  // () is valid operator here

1

Aus Wikipedia ausgeschnitten: http://en.wikipedia.org/wiki/Lambda#Lambda.2C_the_word

In Programmiersprachen wie Lisp und Python ist Lambda ein Operator, mit dem anonyme Funktionen oder Abschlüsse nach der Verwendung von Lambda-Kalkül bezeichnet werden.


Ich denke, Sie haben diese Zeile gemeint: In Programmiersprachen wie Lisp und Python ist Lambda ein Operator, der verwendet wird, um anonyme Funktionen oder Abschlüsse nach der Verwendung von Lambda-Kalkül zu bezeichnen. Ich hatte den Artikel bereits gescannt, aber das verpasst.
Fred
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.