Sunteți pe pagina 1din 1

Programare Funcional - Tema 2

Definii un tip polimorfic Tree3 care memoreaz valori att n frunze ct i n nodurile interne i pentru care exist constructorul de date Empty, reprezentnd arborii vizi. Construii tipul Tree3 astfel nct valorile din nodurile frunz s poat avea tipuri diferite fa de valorile din nodurile interne (2p). Definii o funcie map care aplic dou funcii f respectiv g peste un arbore dat; f se aplic peste valorile din frunze iar g peste valorile din noduri (2p). Definii o funcie fold3 (o versiune a funciei fold pentru obiecte de tip Tree3) care primete ca parametrii dou funcii una pentru transformarea valorilor din frunze i una pentru reducerea unui nod intern. Imaginai-v fold3 ca o funcie care nlocuiete arborele vid cu un caz de baz, iar constructorii pentru noduri respectiv frunze cu funciile trimise ca parametru (3p). Utiliznd fold3 definii funcii care (important: precizai i signatura funciilor): calculeaz numrul de frunze dintr-un arbore (1p) adun valorile dintr-un arbore cu elemente de tip Int (2p) realizeaz o parcurgere stnga-dreapta n inordine a unui arbore i returneaz lista valorilor din frunze (2p) caut apariiile unei anumite valori ntr-un arbore de perechi valoare-atribut (v, a) i returneaz atributele asociate acestei valori sub forma unei liste; utilizai o funcie auxiliar give :: a -> (a, b) -> [b] care primete o valoare i o pereche valoare-atribut i returneaz lista singleton coninnd atributul - dac valorile fac match, respectiv lista vid - dac valorile nu fac match (3p)