Linguaggi di Programmazione (4 Ottobre 2012)
Esercizio 1
Eseguire il "principal typing algorithm" sul termine λx.λy.x
Qual'e' invece il tipo principale dell'operatore di punto fisso
λf.((λx.f(xx))(λx.f(xx))) ?
Esercizio 2
In FJ e' possibile dimostrare il seguente
Theorem [Progress]
Suppose e is a well-typed expression.
(1) If e includes new C0(e1,..,en).f as a subexpression, then fields(C0)=T1f1,..,Tnfn and f is in {f1,..,fn}.
(2) If e includes C0(e1,..,en).m(d1,..,dk) as a subexpression, then mbody(m,C0)=(x1,..,xj, e0) and k=j.
In sintesi, cosa ci dice questo teorema?
Esercizio 3
Definire i concetti di covarianza e controvarianza di una relazione
rispetto ad un operatore e giustificare informalmente la controvarianza della relazione
di sottotipo per il costruttore
di tipo Ref. Giustificare quindi perche' non e' possibile modificare
il tipo delle instance variables in una sottoclasse.
Esercizio 4
Input channel types e Output channel types in PICT: discuterne e fornire un
esempio di programma PICT che ne faccia uso.
Cosa va inserito al posto di "??" affinche' la seguente regola sia una
regola corretta per il subtyping di PICT? Giustificare brevemente.
S ?? T
----------
?S < ?T
Esercizio 5
Si consideri il seguente insieme di fatti PROLOG.
c(1).
c(2).
d(1).
d(2).
e(3).
e(4).
f(3).
f(4).
Descrivere il risultato prodotto dall'interprete PROLOG (giustificando le risposte)
per il seguente goal
?- p(X,Y).
prendendo in considerazione i seguenti insiemi di fatti.
1.
p(X,Y) :- a(X),b(Y).
a(X):- c(_),!,d(X).
b(X):- e(X),!,f(X).
b(X):- f(_).
2.
p(X,Y) :- a(X),b(Y).
a(X):- c(_),!,d(X).
b(X):- e(X),f(X).
3.
p(X,Y) :- a(X),!,b(Y).
a(X):- c(_),d(X).
b(X):- e(X),f(X).
Esercizio 6
In Ocaml la definizione di una classe ha la forma
class name =
object (self:'self)
....
....
end;;
Qual e' il significato di "self" e di "'self"?
Quale vantaggio fornisce l'uso di "'self" relativamente ai metodi binari?