Linguaggi di Programmazione (19 Settembre 2012)

Esercizio 1
Fornire la definizione formale di sostituzione per il lambda-calcolo.
Trovare poi tre termini M,P e Q, tali che M contenga x e y tra le sue variabili libere e tali che M[P/x,Q/y] sia diverso da M[P/x][Q/y]
Esercizio 2
Inserire le premesse (dandone giustificazione) della seguente regola (T-invk) utilizzata dal type system di FJ per tipare l'invocazione di metodo.
???
------------------------------------
Γ |- e0.m(e) ∈ C
In cosa si discosta il type system di FJ rispetto a quello di Java (tenuto conto ovviamente che FJ e' un frammento di Java)?
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
Descrivere il modello di concorrenza ad attori (Actors Model of Concurrency).
Esercizio 5
Si consideri il seguente insieme di fatti e la seguente query
b(1).
b(2).
c(1).
c(2).

?- a(X).
Si dica, per ognuna delle seguenti clausole, cosa produce l'interprete Prolog se aggiunte all'insieme dei fatti.
1. a(X) :- b(X), c(X).
2. a(X) :- b(X),!, b(_), c(X).
3. a(X) :- b(_),!, b(X), c(X).
4. a(X) :- b(_),!, b(X), c(_).
5. a(X) :- \+b(3), X is 3.
motivandone la risposta
Esercizio 6
Descrivere il comportamento dell'operatore fby in Lucid-Syncrone.
I tipi in Lucid-Syncrone (int, bool ecc.) hanno lo stesso significato che in OCaml?