Laurea Magistrale in INFORMATICA Principi di Linguaggi di Programmazione Paradigmi di Programmazione prof. M. Bellia Appello 2 - 7 febbraio 2013 (tempo a disposizione: 2 ore – Totalizzare almeno la metà dei unti in ciascun esercizio) Esercizio 1. (punti 5-10) Uno StrandSet è un componente dello stato di un modello di DNA Computer e consiste di un multi-insieme finito, possibilmente vuoto, di sequenze finite, dette strands, non vuote, su un alfabeto {A,C,G,T}. Lo StrandSet è un valore non modificabile con operazioni che includono: Extract: data una strand p e uno StrandSet U, calcola uno StrandSet contenente tutti gli strands di U che contengono una sotto-sequenza identica a p. esempio: Extract({ACCATAC,TC,TTC,ATCCT},AT) = {ACCATAC, ATCCT}, Si utilizzi Prolog per definire: a. (punti 1) una rappresentazione concreta per: Strands e StrandSets b. (punti 4) un predicato extract/3(U,p,V) che vale true se V=Extract(U,p) c. (punti 1) una rappresentazione concreta per Strand indiciati che associ ad ogni simbolo la propria posizione nello Strand. Esempio: A1C2C3A4T5A6C7 è lo Strand indiciato di ACCATAC d. (punti 2) un predicato indexed/2(p,pi) che val true se pi è la rappresentazione indiciata di p. e. (punti 2) un predicato match/3(u,p,i) che vale true se lo Strand u ha come sotto-sequenza lo Strand p alla posizione i. Esempio: match(ACCATAC, AT,4). Esercizio 2. (punti 6-11) Si definisca, in Caml, un ADT per il tipo astratto TREE per alberi finiti con nodi interni etichettati con valori di un tipo generico A. Le foglie sono etichettate con valori di un tipo generico B. Il tipo fornisce le seguenti operazioni pubbliche: treeN, treeE, treekR: costruttori per albero vuoto, foglia ed albero con radice e figli; subTrees: applicata ad un albero T, calcola la lista di tutti i sottoalberi di T, incluso T. isSub: applicata ad un albero T ed ad un albero S, calcola true se S è sottolabero di T. a. (punti 2) Si dia una definizione del modulo di specifica dell'ADT b. (punti 8) Si dia un modulo di implementazione per l'ADT Si assuma che sui tipi A e B sia definita l'operazione primitiva di uguaglianza =. Esercizio 3. (punti 5-9) a. (punti 5) Si dia una classe Java Tree, per valori del tipo astratto TREE dell’esercizio 2, su generici tipi A e B, con B sottotipo di A, mostrando: stato, intestazione di tutte le operazioni ed implementazione dei costruttori e del solo metodo subTrees. b. (punti 4) Si estenda TREE in una classe TreeS contenente anche l'operazione size che dato un albero calcola il numero di nodi (interni più foglie) contenuti.