This is an old revision of the document!


1. Scrieti o functie in Haskell care primeste un numar natural $ n$ si intoarce o functie $ f_n(x) = 2x+1$ daca $ n$ este par si $ f_n(x) = x-3$ daca $ n$ este impar.

2. Scrieti un predicat in Prolog care verifica daca doua liste au exact aceleasi elemente (nu neaparat in aceeasi ordine).

3. Dati un exemplu de lambda-expresie care nu se poate reduce folosind evaluarea normala, dar care se poate reduce in exact doi pasi (la o expresie ireductibila) folosind evaluarea aplicativa.

4. Folosind tipul de date Query, definiti o interogare care selecteaza ocupatia pentru toti utilizatorii care au user_id-ul intre 15 si 45 si au numele care incepe cu litera M sau litera N.

5. Definiti tipul de date TNodeTrie al arborilor de cautare in care fiecare muchie este encodata cu un caracter. Scrieti o functie care primeste un String si un arbore cu acest tip de noduri si returneaza daca poate fi format acel String prin parcurgerea acelui arbore.

TrieSearch :: String -> TNodeTrie -> Bool

Eg.

          .
     a/  b|  c\
    .          .
 c/  e\  a|   o|
 .     .  .    .
              t|
               .

String-uri posibile in acest arbore: a, ac, ae, b, ba, c, co, cot.

6. Consideram formule SAT codificate folosind predicatele and/2, or/2 si not. Spre exemplu: and(not(X),or(Y,not(Z))), codifica formula $ \lnot X \wedge (Y \vee \lnot Z)$ . Scrieti un predicat sat care construieste toate interpretarile variabilelor care satisfac formula. Exemplu:

?- sat(and(not(X),or(Y,not(Z))).
 
X = 0, Y = 1, Z = 0;
X = 0, Y = 1, Z = 1;
X = 0, Y = 0, Z = 0;