Come è possibile programmare usando solo variabili immutabili / "di sola lettura"?

5

Credo che esistano lingue in cui tutti i nomi con valori associati non possono avere i loro valori associati modificati. Un esempio potrebbe essere una lingua in cui tutti i nomi si comportano come a nel seguente codice C:

int main(void)
{
  const int a = 0;
  a = 1;
}

vale a dire, tutti i nomi si comportano come ciò che C chiama una "variabile di sola lettura" qui.

So che certi costrutti, come il ciclo for di C, non sarebbero possibili se non fosse possibile riassegnare le variabili. Ma credo che i linguaggi in cui le variabili siano esclusivamente di sola lettura utilizzino le funzioni ricorsive in coda per realizzare il looping.

Se una lingua non consente di assegnare nuovi valori alle variabili, quali caratteristiche (come la ricorsione in coda, nell'esempio precedente) sono necessarie per consentire la scrittura dei programmi, che altrimenti sarebbe difficile / impossibile scrivere senza riassegnazione?

    
posta Jackson 18.09.2016 - 20:29
fonte

1 risposta

7

Con solo costanti e senza variabili, tutti i tuoi programmi sarebbero totalmente prevedibili e - attraverso la costante propagazione - potrebbero semplicemente essere riscritti producendo direttamente l'output atteso.

Come gestiresti l'input dell'utente in un mondo del genere? Come definiresti anche semplici funzioni aritmetiche, come f (x) = x ^ 2 senza precalcolare e incorporare nel tuo programma un'infinità di combinazioni?

Tuttavia, ci sono diverse lingue funzionali in giro. In questi hai costanti come in ogni lingua. Ma anche variabili / parametri, che possono assumere un valore (ad esempio parametro funzione, input dell'utente), ma non possono essere modificati successivamente. Quindi non parliamo di costanti, ma di variabili immutabili .

In questo approccio funzionale puoi scrivere programmi con la piena espressività di una turing machine . Il codice è più semplice da analizzare in termini di propagazione del valore, poiché ogni funzione è senza stato (cioè dipende solo dall'input della funzione). E non devi affrontare gli effetti collaterali su variabili globali o locali. Tieni presente tuttavia che tale linguaggio funzionale (ad esempio Caml o F # ) non sono ancora mainstream.

    
risposta data 18.09.2016 - 22:20
fonte

Leggi altre domande sui tag