Linguaggi di Programmazione (7 Ottobre 2014)
Esercizio 1
Si consideri la seguente funzione Haskell:
myPenultimo (x) | (length x)==1 = x
| (length x)==2 = head x
| otherwise = myPenultimo(tail x)
L'interprete restituisce il seguente errore
Occurs check: cannot construct the infinite type: a0 = [a0]
Expected type: [[a0]]
Actual type: [a0]
In the first argument of `head', namely `x'
In the expression: head x
In an equation for `myPenultimo':
myPenultimo (x)
| (length x) == 1 = x
| (length x) == 2 = head x
| otherwise = myPenultimo (tail x)
Failed, modules loaded: none.
Perche'?
Modificare inoltre la funzione in modo che restituisca il penultimo elemento di una lista
(definendo penultimo di [] come [] e penultimo di una lista con un solo elemento come
l'unico l'elemento).
Esercizio 2
Perche' il downcast in Java e' pericoloso? E perche', nonostante cio', e' stato
inserito nel linguaggio?
Esercizio 3
Che cosa si intende con scope extrusion nel π-calcolo?
Come si formalizza tale nozione nella relazione di riduzione che vede
un insieme di processi come in sistema chiuso (che non ha cioe' alcuna interazione
con l'ambiente esterno)?
Esercizio 4
animal(lion).
animal(sparrow).
animal(X) :- bird(X).
has_feathers(sparrow).
bird(eagle).
bird(X) :-
animal(X),
has_feathers(X).
Il programma prolog appena definito, sulla query
?-bird(X).
entra in loop, restituendo infinite volte il valore sparrow.
Perche'?
Modificare il programma, mantenendo gli stessi fatti, in modo che
cio' non accada.
Esercizio 5
Discutere brevemente del concetto di chiusura (closure).
Esercizio 6
Si descriva un session type che rappresenti (dalla parte del server) il protocollo di interazione
con un server che permette di effettuare una votazione.
Il protocollo e' descritto informalmente nel modo seguente.
Si effettua un login inserendo stringa come password.
Se la password e' scorretta viene segnalato un errore, altrimenti si procede
dando la possibilita' di votare per l'elezione del sindaco o per quella della giunta.
La votazione procede fornendo il nome del sindaco, se si intende votare per il sindaco,
oppure con due nomi, nel caso della giunta.
Se il nome inserito non e' tra i candidati ammissibili si comunica un errore, altrimenti
viene fornito a chi vota un valore numerico che corrisponde ad una ricevuta di avvenuta votazione.