Qualunque linguaggio di programmazione usa le variabili come sono in matematica?

11

In matematica, una variabile significa che puoi inserire qualsiasi numero lì, e un'equazione sarà ancora vera:

root(square(x)) = abs(x)

Nei linguaggi di programmazione, non è così: una var può cambiare. In Python:

y = (x**2)**.5
x *= 2
assert y == abs(x)

genererà un'eccezione, poiché x nell'ultima riga non è la stessa.

Esistono linguaggi di programmazione che utilizzano variabili immutabili?

    
posta culebrón 16.10.2010 - 20:13
fonte

5 risposte

7

Per rispondere alla domanda del titolo "Qualunque linguaggio di programmazione usa le variabili come sono in matematica?": C, C #, Java, C ++ e qualsiasi altro linguaggio in stile C utilizzano le variabili nel modo in cui vengono utilizzate in matematica.

Devi solo usare == invece di =.

Se prendo il tuo originale

root(square(x)) = abs(x)

Quindi posso tradurlo direttamente in C # senza alcuna modifica se non per la sintassi. Math.Sqrt(Math.Pow(x,2)) == Math.Abs(x)

Verrà valutato true per qualsiasi valore di x, a condizione che x al quadrato sia inferiore al massimo per il tipo di dati che si sta utilizzando. (Java sarà grossolanamente simile, ma credo che lo spazio dei nomi di Math sia un po 'diverso)

Questo prossimo bit non riuscirà a compilare in C # perché il compilatore è abbastanza intelligente da sapere che non posso assegnare il ritorno di un'operazione a un'altra operazione.

Math.Sqrt(Math.Pow(x,2)) = Math.Abs(x)

L'immutabilità non ha nulla a che fare con questo. Devi ancora assegnare il valore in un linguaggio immutabile ed è del tutto possibile che una determinata lingua possa scegliere di farlo usando = come operatore.

Dimostrando ulteriormente il punto, questo ciclo funzionerà finché non esaurirai i valori legali di x e otterrai un'eccezione di overflow:

 while (Math.Sqrt(Math.Pow(x, 2)) == Math.Abs(x))
        {
            ++x;
            System.Console.WriteLine(x);
        }

Questo è il motivo per cui i matematici odiano l'uso di = per l'assegnazione. Li confonde. Penso che questo ti abbia portato a confonderti. Prendi il tuo esempio

y = (x**2)**.5
x *= 2
assert y == abs(x)

Quando trasformo questo in algebra, ottengo questo:

abs (2x) = root (x ^ 2)

Che ovviamente non è vero per valori diversi da 0. Immutabilità ti salva solo dall'errore di cambiare il valore di x quando aggiungi passaggi aggiuntivi tra la valutazione del lato sinistro e il lato destro dell'equazione originale. In realtà non cambia come valuti l'espressione.

    
risposta data 17.10.2010 - 03:50
fonte
25

Linguaggi di programmazione puramente funzionali, come Haskell , applicano variabili immutabili. Mi piace chiamarli identificatori, invece di variabili.

    
risposta data 16.10.2010 - 20:17
fonte
5

Il segno = utilizzato nei linguaggi di programmazione è fuorviante.   <- , che significa "negozio", o anche COBOL MOVE dovrebbe invece essere usato.

In aggiunta, Prolog usa variabili come la matematica: le variabili non possono cambiare e il motore Prolog riempie le variabili per vedere se le soluzioni esistono.

Inoltre, Curry è un mix di Haskell e Prolog.

    
risposta data 17.10.2010 - 08:41
fonte
4

Puoi simulare l'immutabilità anche in Python impedendo gli aggiornamenti alle classi. Come affermato in precedenza, i linguaggi di programmazione funzionale più puri rafforzano l'immutabilità. Clojure è una recente aggiunta alla JVM piattaforma (Clojure è un dialetto LISP)

In Scala (anche a JVM lingua) un unificatore delle variabili di supporto OO e FP dichiarate con val è immutabile. L'espressività di Scala e il supporto ibrido OO / FP fanno apparire simile a Mathematica . ( Akka è un framework che aggiunge funzionalità di Erlang OTP e Clojure come STM .. a Scala e Java.) LACASA aggiunge un sistema di tipi e un modello di programmazione per rafforzare la disciplina della capacità degli oggetti in Scala, e per fornire riferimenti di oggetti unici. ( codice ) ( background teorico )

In Java una variabile dichiarata final è immutabile e le librerie Java come Google Guava includono immutabili librerie di collezioni. Anche Java String s è sempre immutabile.

    
risposta data 17.10.2010 - 00:27
fonte
3

C, C ++ e Objective-C possono specificare l'immutabilità per argomenti funzione (e metodo), così come altre variabili (identificatori), con il qualificatore di tipo "const".

    
risposta data 17.10.2010 - 02:47
fonte

Leggi altre domande sui tag