2008-09-29 8 views
89

Kann jemand eine gute Beschreibung geben, was ein Lambda ist? Wir haben ein Tag für sie und sie sind auf die Geheimnisse von C# Frage, aber ich muss noch eine gute Definition und Erklärung von dem finden, was sie an erster Stelle sind.Was ist ein Lambda?

+0

Wie wäre es [Wikipedias Lambda-Kalkül Artikel] (http://en.wikipedia.org/wiki/Lambda_calculus) für einen Start? Dann [Wikipedia's Artikel über funktionale Programmierung] (http://en.wikipedia.org/wiki/Functional_programming_language) als Follow-up. – Thorsten79

+1

mögliches Duplikat von [Was ist eine Lambda (Funktion)?] (Http://stackoverflow.com/questions/16501/what-is-a-lambda-function) – nawfal

+0

amda Ausdruck erklärt [hier] (https: // chaseyourjava .blogspot.in/2017/11/lamda-expression-in-java-8.html) schön. –

Antwort

123

Verschlüssen, Lambda-Ausdrücke und anonyme Funktionen sind nicht unbedingt die gleiche Sache.

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

Ein Abschluss ist eine Funktion, die auf Variablen zugreifen kann, die sich in ihrem lexikalischen Gültigkeitsbereich befanden, als sie deklariert wurden, selbst nachdem sie aus des Geltungsbereichs gefallen sind. Anonyme Funktionen müssen nicht unbedingt Schließungen sein, aber sie sind in den meisten Sprachen und werden weniger nützlich, wenn sie es nicht sind.

Ein Lambda ist nicht so gut definiert, so weit die Informatik geht. Viele Sprachen verwenden diesen Begriff nicht einmal. Stattdessen nennen sie sie nur Schließungen 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 brauchen eine benannte Funktion. Lambdas sind Schließungen in beiden Sprachen.

+0

der Begriff könnte Lambda-Kalkül implizieren http://en.wikipedia.org/wiki/Lambda_calculus –

+0

Wow ich mit ich hatte mehr als ein upvote, um diese Frage zu geben. Ich habe so viele technische Antworten in der Terminologie gesehen, aber diese ist kurz und bringt es sofort auf den Punkt. –

+8

+1 für den Begriff "close over" nicht verwenden, um eine Schließung zu definieren, als ob es es klarer macht. – Daniel

1

aus wikipedia abgeschoren http://en.wikipedia.org/wiki/Lambda#Lambda.2C_the_word

In Programmiersprachen wie Lisp und Python, Lambda ist ein Operator zu bezeichnen anonyme Funktionen oder Schließungen, folgende Lambda-Kalkül Verwendung benutzt.

+0

Ich denke, Sie haben diese Zeile gemeint: In Programmiersprachen wie Lisp und Python ist Lambda ein Operator, der anonyme Funktionen oder Schließungen nach der Verwendung von Lambda-Berechnungen verwendet. Ich hatte den Artikel bereits gescannt, aber verpasst. – Fred

8

Es handelt sich nur um eine anonyme Funktion, die inline deklariert wird und normalerweise einem Delegaten zugewiesen wird, wenn Sie keine vollwertige Funktion schreiben möchten. In Sprachen wie lisp/scheme werden sie oft als Funktionsparameter ziemlich frei herumgereicht, aber das Idiom in C# findet in der Regel lambdas, die nur für die langsame Auswertung von Funktionen verwendet werden, wie in linq oder für die Verarbeitung von Code ein bisschen terser.

17

"Lambda" bezieht sich auf die Lambda Calculus oder auf einen bestimmten Lambda-Ausdruck. Lambda-Kalkül ist im Grunde ein Zweig der Logik und Mathematik, die sich mit Funktionen befasst, und ist die Grundlage von functional programming languages.

~ William Riley-Land

19

Auch als Verschlüsse oder anonyme Funktionen .. fand ich die beste Beschreibung here. Grundsätzlich Inline-Block von Code, der als Argument an eine Funktion übergeben werden kann.

4

Es gibt nicht so etwas wie 'ein Lambda' in der Programmierung. Dies 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. Wie so, in Ruby:

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

Als Antwort auf die vorherigen Antworten:
-Das Wichtigste anonymen Funktionen ist nicht, dass sie keinen Namen benötigen.
- Gehäuse sind ein separates Konzept.
- Ein gigantischer Wikipedia-Artikel macht das nicht klarer.

Hier ist meine Antwort in 3 Teilen:
1.Ein Lambda ist eine Funktion, die auch ein Ausdruck ist. Das ist das Wichtigste.
2. Viele Sprachen, die sogenannte "lambdas" implementieren, fügen einige syntaktischen Zucker hinzu, um das Schreiben dieser kurzen Funktionen einfacher und schneller zu machen, aber dies ist 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 "First-Class-Bürger" innerhalb der Sprache. Ich kann damit alle wichtigen Dinge tun:

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