Linguaggi di Programmazione (20 Giugno 2010)
Esercizio 1
(a)
Il cast in Java quali problemi crea?
Quali garanzie ci forniscono a riguardo i teoremi di FJ i cui enunciati
sono stati studiati nel corso?
(b)
Il sistema di tipi di Java e' invariante, covariante o controvariante
rispetto ai tipi degli argomenti e del risultato dei metodi
overridden nelle sottoclassi? Quali problemi comporta
tale invarianza/covarianza/controvarianza? Quali vantaggi?
Si potrebbe definire il type system di Java diversamente per migliorarlo?
Esercizio 2
(a)
Definire in Haskell la lista di tutti i numeri naturali a partire da 1.
Utilizzarla per definire la funzione che, preso un predicato sui numeri, restituisca
la lista di tutti i numeri che soddisfano tale predicato.
(b)
Definire nel modo piu' formale possibile la relazione di beta-riduzione
(passo unitario di computazione).
Esercizio 3
(a)
Definire l'algoritmo di unificazione per i tipi del Lambda-calcolo tipato semplice. Modificare tale algoritmo per poterlo applicare ai termini del PROLOG.
(b)
Definire la nozione di riduzione per i termini del π-calcolo.
Perche' tale relazione conviene descriverla anche come LTS (labelled transition
system)? Quali vantaggi ne derivano?