Tipi algebrici

Transcript

Tipi algebrici
November 17, 2006
lab3.tex
1
Tipi algebrici
Esercizio 1 Progettare un tipo algebrico quasi bool i cui valori possono essere False, True e
Maybe. Definire
• le funzioni logiche binarie quasi and, quasi or, quasi xor;
• la funzione logica unaria quasi not;
• la generalizzazione delle funzioni logiche binarie su liste di valori quasi bool: quasi and all,
quasi or all, quasi xor all. Se possibile definire queste funzioni come specializzazioni di
funzioni di ordine superiore della libreria standard di OCaml;
• le funzioni di conversione da valori di tipo bool a valori di tipo quasi bool e viceversa.
Esercizio 2 Ridefinire il tipo algebrico lista con due costruttori Nil e Cons e implementare le
funzioni head, tail, length, append, assoc.
Esercizio 3 Definire un tipo algebrico “numero” per rappresentare numeri in classi eterogenee:
interi, floating point, e razionali (coppie numeratore/denominatore). Definire le operazioni di
somma, sottrazione, prodotto e divisione operando le opportune conversioni di classe e le funzioni
trigonometriche seno e coseno cercando di produrre un numero nella classe più piccola (consideriamo la classe degli interi più piccola della classe dei razionali e la classe dei razionali più piccola
della classe dei floating point).
Esercizio 4 Definire il tipo algebrico “albero binario”. Progettare funzioni OCaml per
1. collezionare tutti i valori di un albero binario in una lista;
2. verificare se un albero binario è un albero binario di ricerca;
3. inserire un valore in un albero binario di ricerca;
4. eliminare un valore da un albero binario di ricerca;
5. ordinare una lista usando un albero binario di ricerca.
Esercizio 5 Usare il tipo algebrico “albero binario” dell’esercizio precedente per rappresentare
insiemi di valori. Progettare funzioni OCaml per
1. creare l’insieme vuoto;
2. verificare se un insieme è vuoto;
3. creare l’insieme singoletto v, per ogni elemento v;
4. verificare se un elemento appartiene ad un insieme;
5. aggiungere un elemento ad un insieme;
6. calcolare l’unione di due insiemi;
7. calcolare l’insersezione di due insiemi;
8. calcolare la differenza di due insiemi;
9. iterare una funzione α → unit su tutti gli elementi di un insieme;
10. ritornare tutti gli elementi di un insieme in una lista.
Esercizio 6 Definire il tipo algebrico “espressione regolare” su caratteri. Progettare funzioni
OCaml per
1. convertire un’espressione regolare in una stringa;
2. semplificare una espressione regolare secondo le proprietà delle espressioni regolari viste a
lezione.