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.