Cos'è una Lambda?


93

Qualcuno potrebbe fornire una buona descrizione di cosa sia un Lambda? Abbiamo un tag per loro e sono sui segreti della domanda C #, ma devo ancora trovare una buona definizione e spiegazione di cosa sono in primo luogo.



2
possibile duplicato di What is a lambda (function)?
nawfal

espressione di amda spiegata qui magnificamente.
Jameer Mulani

Risposte:


135

Chiusure, lambda e funzioni anonime non sono necessariamente la stessa cosa.

Una funzione anonima è qualsiasi funzione che non ha (o, almeno, necessita) un proprio nome.

Una chiusura è una funzione che può accedere a variabili che erano nel suo ambito lessicale quando è stata dichiarata, anche dopo che sono uscite dallo scope. Le funzioni anonime non devono necessariamente essere chiusure, ma sono nella maggior parte delle lingue e diventano meno utili quando non lo sono.

Un lambda è .. non così ben definito per quanto riguarda l'informatica. Molte lingue non usano nemmeno il termine; invece le chiameranno semplicemente chiusure o funzioni anon o inventeranno la propria terminologia. In LISP, un lambda è solo una funzione anonima. In Python, un lambda è una funzione anonima specificamente limitata a una singola espressione; qualcosa di più e hai bisogno di una funzione con nome. Le lambda sono chiusure in entrambe le lingue.


il termine potrebbe essere inteso a implicare lambda calcolo en.wikipedia.org/wiki/Lambda_calculus
Steven A. Lowe

Wow, ho avuto più di un voto positivo per dare questa domanda. Ho visto così tante risposte tecniche impantanate nella terminologia, ma questa è concisa e chiarisce immediatamente il punto.
Matthew Stopa

8
+1 per non aver usato il termine "close over" per definire una chiusura come se la rendesse più chiara.
Daniel

5
Una regione in cui può esistere una variabile (cioè uno scope) definita dalla struttura del tuo codice (cioè, lessicalmente). Ad esempio, nella maggior parte delle lingue, una funzione definisce un ambito lessicale; qualsiasi variabile dichiarata all'interno della funzione è inaccessibile al di fuori di essa.
Eevee

19

Chiamate anche chiusure o funzioni anonime .. Ho trovato la migliore descrizione qui . Fondamentalmente, blocco di codice inline che può essere passato come argomento a una funzione.



8

È solo una funzione anonima dichiarata inline, in genere assegnata a un delegato quando non si desidera scrivere una funzione a tutti gli effetti.

In linguaggi come lisp / scheme, sono spesso passati in giro abbastanza liberamente come parametri di funzione, ma l'idioma in C # trova tipicamente lambda usati solo per la valutazione pigra delle funzioni, come in linq, o per rendere il codice di gestione degli eventi un po 'più conciso.


5

Non esiste davvero una cosa come "un lambda" nella programmazione. Dipende dalla lingua, ecc.

In breve, normalmente un linguaggio che "ha lambda" usa il termine per funzioni anonime o, in alcuni casi, chiusure. In questo modo, in Ruby:

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

4

In risposta alle risposte precedenti:
-La cosa importante delle funzioni anonime non è che non richiedono un nome.
-Le chiusure sono un concetto separato.
-Un gigantesco articolo di wikipedia non lo rende più chiaro.

Ecco la mia risposta in 3 parti:
1. Un lambda è una funzione che è anche un'espressione. Questa è la cosa importante.
2. Molti linguaggi che implementano i cosiddetti "lambda" aggiungono un po 'di zucchero sintattico per rendere la scrittura di queste brevi funzioni più facile e veloce, ma questo non è richiesto.
3. Alcune lingue possono richiedere che un lambda non abbia effetti collaterali . Sarebbe un lambda più puro in senso funzionale.

Quando una funzione è un'espressione, è un "cittadino di prima classe" all'interno della lingua. Posso fare tutte le cose importanti con esso:

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

Ritagliato da wikipedia: http://en.wikipedia.org/wiki/Lambda#Lambda.2C_the_word

Nei linguaggi di programmazione come Lisp e Python, lambda è un operatore utilizzato per denotare funzioni o chiusure anonime, in seguito all'uso di lambda calcolo.


Immagino che intendessi questa linea: nei linguaggi di programmazione come Lisp e Python, lambda è un operatore utilizzato per denotare funzioni o chiusure anonime, in seguito all'uso di lambda calcolo. Avevo già scansionato l'articolo ma non l'ho visto.
Fred
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.