This is an old revision of the document!
Algebraic Data Types
1. Definiți constructori pentru un arbore binar ce poate conține ca elemente numere întregi.
2. Definiți axiome pentru următorii operatori:
size : BTree → Integer
(numărul total de valori din arbore)height : BTree → Integer
(numărul de nivele al arborelui)mirror : BTree → BTree
(arborele oglindit pe verticală, i.e. pentru orice nod, copilul stâng devine copilul drept și vice-versa)flatten : BTree → List
(lista cu toate elementele din arbore; observați că există mai multe ordini posibile)
3. Definiți constructori pentru o coadă (tip FIFO
) ce poate conține elemente de un tip arbitrar E
.
4. Definiți axiome pentru următorii operatori pe coadă:
deque : FIFO → FIFO
(coada fără primul element adăugat, i.e. cel mai vechi)top : FIFO → E
(primul, cel mai vechi adăugat, element)length : FIFO → Integer
(numărul de elemente din coadă)
5. Definiți constructori pentru un Map
cu chei de tip K
și valori de tip V
.
6. Definiți axiome pentru următorii operatori pe Map
:
get : Map × K → V
(elementul asociat cu o cheie dată)update : Map × K × V → Map
(un Map cu o nouă asociere cheie:element)exists : Map × K → Bool
(verifică dacă cheia dată are o valoare asociată)delete : Map × K → Map
(șterge cheia și valoarea asociată)