Linguaggi di Programmazione (18 Settembre 2015)
Esercizio 1
Nei testi e' riportata una frase di K.Bruce in cui si afferma
che tra i principali vantaggi dei linguaggi statically typed
c'e' quello che i tipi forniscono
"extra information that can be used in compiler optimizations".
Motivare la validita' di questa affermazione utilizzando
PICT come esempio.
Esercizio 2
Definire in Haskell il tipo di dato "termine Prolog"
ed inserirlo nella classe Show in modo da vedere sullo schermo
i suoi elementi come se fossero reali termini Prolog.
Esercizio 3
Supponiamo di avere un sistema composto da un processo server e due processi
client.
Il processo server riceve in continuazione dei numeri che i vari client
inviano, li incrementa di uno e rispedisce indietro il risultato.
Il primo client invia il numero 3, mentre il secondo invia 5.
Entrambi i client, una volta ricevuto il numero incrementato, lo stampano.
Ovviamente il sistema rispetta il vincolo che ogni client deve riceve indietro l'incremento del numero che lui
aveva inviato, non del numero inviato dall'altro client.
Si consideri la seguente implementazione parziale, in cui
le comunicazione avvengono attraverso un canale comune ai client e al server,
ed in cui il rispetto del vincolo e' realizzato tramite mutua esclusione
tra i client.
def server [channel:^Int] =
channel?i = (channel!(i+1) | server!channel)
def client .................
run( new ch1:^Int
......
(server!ch1
| .....
)
Si completi il codice.
Esercizio 4
Perche' non e' possibile avere overridden methods con un numero
differente di argomenti anche ammettendo la possibilita' di modificare
il tipo degli input types e dei return types?
Esercizio 5
Se forniamo la seguente definizione all'interprete Ocaml
# let o = object (self:'self)
val mutable x = 0
val mutable y = 0
method get_x = x
method get_y = y
method setcoord new_x new_y = x <- new_x ; y<- new_y
method equal (p2:'self) = self#get_x=p2#get_x && self#get_y=p2#get_y
end;;
otteniamo qualcosa della forma
val o :
??? =
Cosa viene indicato realmente dall'interprete al posto di "???" ?. Giustificare la risposta.
Definire poi un oggetto o2 che abbia la definizione identica ad o,
ma con un metodo in piu' e tale che il tipo di o2 sia un sottotipo di di abbia come
tipo un sottotipo del tipo di o. Giustificare la risposta.
Esercizio 6
Implementare in Erlang la funzione che, presa una funzione F ed un numero N,
restituisca la somma degli F(i) con i che va da 1 ad N.
Poiche' il calcolo di F(i) potrebbe risultare pesante dal punto di vista
computazionale, si faccia in modo che ogni singolo valore F(i) venga calcolato
da un processo apposito.