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.

staticodinamico
eagerSMLEmacs Lisp
lazyHaskellS-Plus

Definizione Exp

Definizione: Linguaggio Exp

Definiamo come Exp il 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 se x non ha un valore assegnato durate la valutazione di expr.

Esempio

L’espressione non è coerente con la grammatica di Exp, poiché y non 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: