Paradigmi - imperativo Flashcards
Imp
Breve presentazione
Imp è un linguaggio imperativo. Come fun, anche imp ha 2 modalità eager per la valutazione dei parametri di una procedura: il passaggio per valore e quello per reference, ed una modalità lazy: il passaggio per nome.
Differenza tra lazy e eager
Imp
Locazione
Un’astrazione sulla nozione di indirizzo di memoria
Store
è l’insieme delle memorie. è una funzione parziale che va dalle locazioni ai valori.
Store = loc –fin–> val
Intuitivamente associa a ogni cella di memoria un valore (mentre l’ambiente serve a ricorda ogni cella di memoria - locazione - a quale variabile è associata)
Ambiente
Imp
L?ambiente in Imp è una funzione parziale che associa variabili a locazioni
Env = var –fin–> loc
è complementare a Store, l’insieme che ricorda i valori contenuti nelle loc
Imp
sintassi
Abbiamo le costanti k€val;
le variabili x,y€var;
Le metavaribili (Espressioni) M,N€Exp;
i programmi p,q€Imp;
Val, Exp ed Imp sono definiti induttivamente dalla seguente sintassi astratta:
k ::= 0 | 1 | . . . | true | false
M ::= k | x | M + N | M < N
p ::= skip | p; q | if M then p else q | while M do p |
var x = M in p | x := M
skip è il programma che non cambia il mondo;
var rappresenta la dichiarazione (ed inizializzazione) di una nuova variabile e := rappresenta l’assegnamento di un valore
ad una variabile già definita
Imp
Relazioni di valutazione –p–>, –M–>
La semantica operazionale di Imp definisce due relazioni di valutazione: una per le espressioni M, che producono un valore senza avere side-effects, ed una per i programmi p, che non producono valori ma cambiano la memoria:
–M–> ⊆ Env × Exp × Store × Val
–p–> ⊆ Env × Imp × Store × Store
Const
Imp
E|- k, S –> k
x
Imp
E|- x, S –> v
(se E(x) = l ed S(l) = v)
Skip
Imp
E|- skip, S –>S
All
Breve presentazione
All è un linguaggio imperativo, che arricchisce Imp con array e procedure. è l’acronimo di algol-like-language, infatti è considerabile il nucleo di un linguaggio Algol.
All - call by value
Ambiente
Le variabili dichiarate come array saranno associate nell’ambiente a sequenze finite e non vuote di
locazioni. Indichiamo con Loc+ l’insieme di tali sequenze. Nota che la dichiarazione di una singola variabile x mediante il costrutto var assocerà ora ad x una sequenza <l> di lunghezza 1.
Le variabili dichiarate come procedure saranno associate a
chiusure.
Dunque, mentre l’insieme Val dei valori e quello Store delle memorie rimangono invariati rispetto ad Imp, per gli ambienti si ha:
Env = Var --fin--> Loc+ ∪ (Var × All × Env)</l>