Introduzione Linguaggi Funzionali
Introduciamo un semplice linguaggio di espressioni aritmetiche Exp composto dall’apparato linguistico minimo per poter studiare la nozione di variabile di un linguaggio di programmazione funzionale (esempio SML, Haskell e LISP).
Arricchendo questo linguaggio con la nozione di funzione (ovvero l’astrazione di un termine rispetto ad una variabile) otterremo poi un linguaggio estremamente espressivo, Fun dove impareremo a codificare booleani, liste, numeri e gran parte dell’aritmetica.
Exp e Fun ci permetteranno di mettere a confronto il binding statico e quello dinamico.
Studieremo inoltre due strategie di valutazione dei programmi, quella eager e quella lazy.
| statico | dinamico | |
|---|---|---|
| eager | SML | Emacs Lisp |
| lazy | Haskell | S-Plus |
Definizione Exp
Definizione: Linguaggio Exp
Definiamo come
Expil linguaggio rappresentato dalla seguente grammatica:Dove:
- ossia è una cotante
- ossia è una variabile
- la quale assegna alla variabile l’espressione all’interno della valutazione di . Inoltre, prende il nome di variabile locale all’interno di .
- è l’insieme
Esempi
- L’espressione indica che la variabile assume valore 3 all’interno della valutazione . Di conseguenza il risultato della valutazione è 4
- L’espressione è valutata come 7
- L’espressione viene valutata come 12
Definizione: Scope di una variabile
Data un’espressione e una variabile , definiamo come scope di la porzione dell’espressione all’interno della quale una variabile può essere riferita, ossia per cui ne è definito il valore.
Definizione: Variabile Libera
Data un’espressione
expr, definiamo come variabile libera sexnon ha un valore assegnato durate la valutazione diexpr.Esempio
L’espressione non è coerente con la grammatica di
Exp, poichéynon definito durante la valutazione di .Di conseguenza, non è possibile valutare l’espressione.
Ambienti
Un ambiente è una funzione parziale (ossia non necessariamente definita su tutto il dominio) che associano ogni variabile al proprio valore: