Domanda

Di recente ho imparato un po 'sul calcolo Lambda, dalla breve introduzione nel testo Pragmatica del linguaggio di programmazione e Questa eccezionale sequenza a 4 video di Adam Doupé. Fondamentalmente ho imparato il GIST di Lambda Calculus, $ alpha $ -conversion e $ beta $ -Deduction, un po 'di numeri di chiesa, aggiunta/sottrazione e $ y $ combinator.

In questo ho imparato il concetto di combinatori, vale a dire che è un'astrazione senza variabili libere. Concetto semplice. E sembrava esserci questa idea che ho continuato a leggere tra le righe, affinché possiamo/dovremmo trasformare le astrazioni non combinanti in combinatori avvolgendoli in astrazioni che legano le variabili libere. Ad esempio, possiamo prendere l'astrazione $ ( lambda x. Xy) $ e avvolgerlo in $ ( lambda y. Lambda x. Xy) $ per legare $ y $.

Ma non è mai stato veramente spiegato perché È importante o utile preferire i combinatori.

Io sono Supponendo È perché i combinatori ci consentono di combinare facilmente le espressioni (sorpresa a sorpresa) senza la necessità di variabili fornite esternamente. Quindi, in altre parole, potremmo valutare una serie di applicazioni combinatori di lunghezza arbitraria senza dover fornire in anticipo alcuna condizione iniziale. Il che per me sembra l'equivalente nella programmazione di evitare le variabili globali in modo da evitare di cercare valori al di fuori dell'ambito attuale, al fine di rendere più facile comprendere il programma e ridurre gli errori. Sembra anche allinearsi con l'idea di un linguaggio "puro funzionale" che non ha variabili e effetti collaterali, il che implicherebbe tale linguaggio è effettivamente una serie di applicazioni combinatorie.

È corretto?

Nessuna soluzione corretta

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a cs.stackexchange
scroll top