Qual è la relazione tra lambda calcolo e linguaggi di programmazione? [chiuso]

11

Sto iniziando il mio primo anno (al college) in Informatica il prossimo anno e scrivo principalmente in C (se questo è importante). Ho provato a cercare ma la maggior parte di ciò che trovo presuppone la conoscenza del calcolo lambda. Perché il calcolo lambda è considerato molto più utile del calcolo a singola variabile nel prograrmming? Esiste una relazione tra espressioni lambda e programmi funzionali? È stato il lavoro di Alonzo Church sul calcolo lambda che ha influenzato lo sviluppo dei linguaggi di programmazione?

Tutti al di fuori della scuola continuano a ronzare e non ho idea di cosa parleranno anche se sono ansioso di apprenderlo e vedere come si relaziona direttamente con la mia programmazione e comprensione dei linguaggi di programmazione.

    
posta RonaldMunodawafa 18.10.2014 - 23:23
fonte

2 risposte

23

Il Lambda Calculus è interessante, elegante e facilita la comprensione dei linguaggi di programmazione funzionale. Tuttavia, non incontrerai la LC in un tipico corso di laurea triennale in CS, quindi non devi apprenderlo in questo momento: ti consiglio di sperimentare con i linguaggi funzionali prima di rivisitare il Lambda Calculus. Credo che OCaml sia un buon punto di partenza per la programmazione funzionale per un programmatore C, e che Scheme sia un buon punto di partenza per immergersi nel Lambda Calculus.

Il Lambda Calculus non è associato a Calculus (che invece dovrebbe essere chiamato Analysis). In generale, un calcolo è un "sistema formale", cioè un insieme di regole per fare qualcosa. Mentre Calcolo differenziale fornisce regole sul cambio di valori, le regole del Calcolo Lambda descrivono il calcolo stesso. Da questo insieme di regole basilari, possiamo costruire calcoli arbitrari, rappresentazioni di dati come booleani, interi o liste e persino controllare costrutti di flusso come condizionali o cicli. Il LC è equivalente a Turing Machines, ma entrambi i modelli hanno differenti punti di forza.

Lambda Calculus ha avuto un impatto enorme sui linguaggi di programmazione. Il secondo linguaggio di alto livello da implementare era il Lisp, che può essere inteso come una codifica diretta della LC in un linguaggio di programmazione. Questa "programmazione funzionale" ha un enorme effetto sull'evoluzione dei linguaggi di programmazione. Funzioni come le funzioni anonime, i puntatori di funzioni, le chiusure (funzioni annidate), la garbage collection, l'ambito variabile, la metaprogrammazione, i progressi nei sistemi di tipi, l'inferenza di tipo, i linguaggi interpretati, i linguaggi dinamici, la programmazione orientata agli oggetti sono dovuti in gran parte al ramo della programmazione funzionale dei linguaggi di programmazione. C'è una battuta che ogni nuovo linguaggio di programmazione (non accademico) aggiunge solo funzionalità che Lisp ha già da decenni.

Oltre a ciò, il Lambda Calculus e altri calcoli correlati sono strumenti indispensabili nella programmazione della teoria del linguaggio e in alcune tecniche di costruzione di compilatori.

Qualsiasi linguaggio che abbia funzioni anonime che si comportano come chiusure e che possono essere trasmesse liberamente contiene immediatamente una codifica del calcolo lambda. Le funzioni anonime corrispondono a espressioni lambda, tranne che nelle funzioni LC hanno sempre esattamente un argomento. Tuttavia, qualsiasi lingua completa di Turing è equivalente alla LC, quindi la LC può sempre essere implementata in tali lingue. Questo tende ad accadere nei sistemi di corrispondenza delle regole o nei formati di configurazione eccessivamente intelligenti, dando origine alla "decima regola di Greenspun" (per lo più, per lo più): " Qualsiasi programma C o Fortran sufficientemente complicato contiene un ad hoc, specificato in modo informale, implementata in modo lento, con implementazione di metà del Common Lisp. "

    
risposta data 19.10.2014 - 00:25
fonte
8

Il calcolo Lambda non ha nulla a che fare con il calcolo differenziale / integrale. Calcolo nel senso più generico della parola significa solo un sistema di calcolo.

Ad un livello molto elevato il calcolo lambda è un modello di calcolo allo stesso modo in cui una macchina di turing è un modello di calcolo. Il motivo per cui i ricercatori del linguaggio di programmazione studiano il calcolo lambda è perché ha un strong legame con i metodi formali in matematica come la logica e la teoria delle categorie. Pertanto, i metodi di questi domini possono essere applicati allo studio di vari aspetti e estensioni del calcolo lambda, che a sua volta aiuta a progettare linguaggi di programmazione migliori con determinate proprietà.

L'influenza più diretta del calcolo lambda nei linguaggi di programmazione di solito appare sotto forma di funzioni e chiusure di prima classe. C non ha il supporto per le chiusure e quindi dovrai esplorare il concetto in un linguaggio più di alto livello come Lisp, Python, Ruby, JavaScript, ecc. Storicamente Lisp è considerato la prima implementazione concreta del lambda calcolo come linguaggio di programmazione .

    
risposta data 19.10.2014 - 00:07
fonte