funzioni lambda anonime (programmazione funzionale)


10

Cosa sono le funzioni anonime (lambda)? Qual è la definizione formale di una funzione anonima in un linguaggio di programmazione funzionale?

In parole semplici, quando sto programmando in schema / lisp direi che una funzione anonima (lambda) è una funzione che non è legata a un identificatore.

È tutto ciò che puoi dire formalmente su una funzione lambda? Penso che ci siano più dettagli che possono essere aggiunti a questa semplice definizione. Per favore, elabora e grazie!


Risposte:


10

Secondo me, è tutto ciò che puoi veramente dire su di loro.

L'idea è che in un linguaggio di ordine superiore, una funzione è solo un altro tipo di valore. Allo stesso modo puoi avere (3 + 4) senza un identificatore in C, puoi avere (lambda (x) + (3 x))) senza un identificatore nello schema.

La chiave qui non è che c'è qualcosa di speciale nelle funzioni anonime. Sono solo le restrizioni di altre lingue che richiedono che le funzioni siano trattate in modo diverso da qualsiasi altro valore. Le definizioni speciali sono per linguaggi procedurali che non li consentono, non per linguaggi funzionali con do.


11

Nel calcolo lambda, tutte le funzioni (termini) sono anonime. Questa è una proprietà essenziale del calcolo lambda: è possibile comporre funzioni complesse da funzioni più semplici senza assegnare loro nomi.

Nei linguaggi di programmazione, nella maggior parte dei casi è desiderabile dare nomi alle funzioni, perché questo è il modo in cui pensiamo e rende il codice leggibile per gli umani. Ma la compilazione alla fine rimuove i nomi durante la produzione di un eseguibile (se ignoriamo le informazioni di debug).

Se una lingua consente di esprimere funzioni anonime (ovvero funzioni senza nomi), può offrire un vantaggio sia ai programmatori che ai compilatori: i programmatori possono spesso scrivere codice più breve e i compilatori possono ottimizzare al meglio, sapendo che una funzione anonima viene utilizzata proprio posto e non altrove.


1

Dipende da quale parte della tua domanda hai posto l'accento. Se è specificamente la proprietà di essere anonimi per funzioni anonime, allora l'unica risposta è che sono valori non associati . Se si parla di funzioni in generale, le funzioni anonime sono probabilmente la manifestazione più visibile dell'uso del calcolo lambda in un ambiente funzionale, per i linguaggi applicativi .

In effetti, dal punto di vista del calcolo lambda, le espressioni lambda sono il costrutto molto sintattico utilizzato per creare associazioni. Richiama la notazione usata nel calcolo lambda:

λf.λX.fX

fXfX

Un linguaggio di solito offre modi, come let(ML come linguaggi, schema) o define(schema) per creare associazioni utilizzabili al livello più alto (o all'interno di costrutti sintattici più complessi di funzioni, come moduli o oggetti), ma l'unico strumento necessario per gli attacchi è la lambda ai livelli più bassi.

Se guardi a lingue come i dialetti schema o lisp, il loro fondamento è il calcolo lambda e molte forme speciali sono davvero lambda ricoperti di zucchero.

Per i linguaggi concatenativi , la storia è leggermente diversa. Le lambda non sono necessarie e in realtà controproducenti. Qual è lo scopo di definire lambda anonimi, quando tutto è una funzione ?

C'è in qualche modo una dualità tra questi due tipi di manguages. Il secondo si concentra sulla combinazione di funzioni prive di punti e cerca quindi di rappresentare tutto come funzioni, mentre il primo lavora su un calcolo più elaborato e si sforza di avere funzioni come valori di prima classe, come qualsiasi altro valore del linguaggio. A questo proposito, si potrebbe vedere lambda come il risultato di quello sforzo.

Alcuni suggerimenti sull'argomento introdotti (male) in questa risposta:

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.