Edit this page Backlinks This page is read only. You can view the source, but not change it. Ask your administrator if you think this is wrong. ====== 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ă)