1. Scrieti o functie in Haskell care verifica daca o doua liste contin exact aceleasi elemente (nu neaparat in ordine). 2. Scrieti un predicat in Prolog care verifica daca **toate** elementele unei liste sunt pozitive. 3. Evaluati, folosind strategiile normala si aplicativa, urmatoarea lambda-expresie $math[(\lambda x.(x\;(x\;x))\; (\lambda z.x\;\lambda x.z))]. 4. Folosind tipul de date ''Query'', definiti o interogare care selecteaza ocupatia pentru toti utilizatorii care au varsta intre 15 si 45 sau au numele formate din cuvinte care incep cu litera ''Q'' sau litera ''F''. 5. Definiti tipul de date ''Sentence'', care codifica propozitii dupa urmatoarele reguli: * o propozitie este formata dintr-un **subiect** si un **obiect** * un subiect este **un nume propriu** format din unul, doua sau trei string-uri care incep cu majuscula. * un obiect este un **predicat** (String) urmat de unul sau mai multe adjective (String-uri). Scrieti o functie care primeste un ''String'', si intoarce un obiect ''Sentence''. Puteti presupune ca string-ul este format corect. 6. Scrieti un predicat in Prolog care primeste o lista ''L'' si construieste **lista tuturor rotatiilor** listei ''L''. Lista tuturor rotatiilor listei ''[1,2,3]'' este ''[[1,2,3],[2,3,1],[3,1,2]]''.