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 $ (\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.