====== 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''.