Linguaggi di Programmazione (20 Giugno 2012)
Esercizio 1
Definire in Haskell il tipo di dato astratto
Albero Binario con rami infiniti e con nodi con etichette di tipo parametrico a.
Costruire poi l'albero infinito con etichette numeriche
della forma:
1
/ \
/ \
/ \
2 3
/ \ / \
4 5 6 7
/ \ / \ / .......
8 9 10 11 12 ........
.......................
Esercizio 2
Discutere brevemente dell'uso dell'algoritmo di unificazione nell'interprete Haskell
ed in quello Prolog.
Esercizio 3
A.A.11/12 PICT ed Erlang: discutere delle caratteristiche comuni e delle principali
differenze.
A.A.precedenti
Il seguente programma dovrebbe stampare "ping" e "pong" alternativamente.
Ritardi nell'esecuzione di print!"ping" o print!"pong" potrebbero pero'
impedire che cio' avvenga correttamente.
Modificare il codice utilizzando il canale pr al posto di print in modo da
garantire l'alternanza di "ping" e "pong".
def ping n:Int =
if (== n 0) then
()
else
( print!"ping"
| pong!(dec n)
)
and pong n:Int =
if (== n 0) then
()
else
( print!"pong"
| ping!(dec n)
)
Ricordiamo che sul canale predefinito pr viene inviata una tupla
formata da una stringa da stampare ed un canale responsive su cui
viene inviato un segnale [] di sincronizzazione a stampa avvenuta.
Esercizio 4
Cosa si intende per LTS nel contesto del π-calcolo? Qual e' il vantaggio
di utilizzare un LTS per studiare il π-calcolo al posto della relazione
di riduzione? Qual e' la relazione tra LTS e relazione di riduzione per il
π-calcolo?
Esercizio 5
A.A. 11/12
Dire se ed eventualmente in quali casi in OCaml una sottoclasse definisce anche
un sottotipo.
A.A.precedenti Definire una classe in OCaml i cui oggetti abbiano il tipo seguente
('a)< pippo : int; pluto : int; paperino : int -> int -> unit; paperina : 'a -> bool >
Esercizio 6
Descrivere (possibilmente anche con un breve esempio) quella che viene comunemente indicata
come Declarative Concurrency.