Examen restanta 27 mai

1. Scrieti o functie care primeste o lista de String-uri si interschimba primul caracter cu al patrulea. Exemplu:

repl ["Matei", "Mihai", "George"] = ["eatMi", "aihMi", "reoGge"]

2. Scrieti un predicat care primeste o lista de liste imbricate, si construieste o lista ne-imbricata cu aceleasi elemente. Exemplu:

?- flat([[a,b], [c], [[[d]]], e],R).
 
R = [a,b,c,d,e].

3. Dati un exemplu de lambda expresie reductibila, care produce aceeasi secventa de reduceri, atunci cand este evaluata prin strategia normala si prin cea aplicativa.

4. Scrieti o functie in Haskell care primeste o matrice m si un intreg i si intoarce coloana i din matrice, sub forma unei liste.

5. Fie urmatorul cod in Haskell care codifica formule boolene:

data CNF = Var Bool | And CNF CNF | Or CNF CNF | Not CNF
eval (Var x) = x
eval (And f f') = (eval f) && (eval f')
eval (Or f f') = (eval f) || (eval f')
eval (Not f) = not (eval f)

Modificati codul de mai sus (si implementarea lui eval) astfel incat arbori precum:

      And
     /   \
   And   True
  /  \
 False True       

sa poata fi reprezentati folosind un singur nod cu mai multi copii:

      And
   /   |   \   
False True True  

6. Scrieti un predicat p(X,K,Y) care construieste toate submultimile de dimensiune K formate cu elemente din X.