Linguaggi di Programmazione (6 Luglio 2012)
Esercizio 1
Sia
data InfNBT = Join Int InfNBT InfNBT
il tipo di dato degli alberi binari con rami infiniti ed etichette numeriche.
Si definisca myIT come il seguente elemento di InfNBT
1
/ \
/ \
/ \
2 3
/ \ / \
4 5 6 7
/ \ / \ / .......
8 9 10 11 12 ........
.......................
e poi
si definisca la funzione
levelOrder :: InfNBT → [Int]
che restituisce la lista delle etichette di un albero infinito ordinate livello per livello da sinistra
a destra.
Per esempio, la valutazione di (levelOrder myIT) produrra' la lista infinita
di tutti gli interi a partire da 1.
(Una possibile soluzione potrebbe utilizzare una funzione che, preso un albero ed un numero n,
restituisca la lista di tutti i sottoalberi di livello n)
Si scriva inoltre la piu' breve espressione Haskell il cui valore e' la lista
di tutti gli interi a partire da 1.
Esercizio 2
Discutere brevemente del concetto di subtyping e del suo uso in Haskell,
Pict e OCaml.
Esercizio 3
A.A. 11/12
Dimostrare formalmente che in Pict si puo' sostituire un
canale di tipo
![T1 ![T2]]
con uno di tipo
![T1' ![T2']]
se si suppone che T1<:T1' e che T2'<:T2
A.A.precedenti (e A.A. 11/12 per chi non riesce a fare l'esercizio
precedente)
Definire un processo Core PICT
che stampi (non necessariamente nel loro ordine) tutti i numeri
dispari.
Esercizio 4
Enunciare il Teorema di Confluenza del λ-calcolo ed utilizzarlo per
dimostrare la proprieta' di unicita' della forma normale.
Esercizio 5
Il seguente codice Prolog dovrebbe calcolare
i numeri di Fibonacci.
Dopo aver trovato la soluzione pero' il programma ne cerca una seconda e va in loop.
Perche'?
Modificare il programma in modo che restituisca solo la soluzione corretta,
giustificando le modifiche fatte.
fib(0,1).
fib(1,1).
fib(N,M) :- P is N-1, Q is N-2, fib(P,N1), fib(Q,N2), M is N1+N2.
Esercizio 6
Descrivere brevemente cosa si intende per Discrete Syncronous Programming e
- A.A. 11/12 di come il linguaggio Lucid-Syncrone sia basato su questo
paradigma di programmazione.
- A.A.precedenti delle differenze con il Functional Reactive Programming.