SUBIECTE PF (de acum 2 ani) ******************* 29 iunie (subiecte nr. 1): ********************* 1. Functia (lambda (x) (lambda (y)(cons x y))) are forma: a) forma e decisa de modul de reducere al functiei b) ambele forme curry si uncurry pentru ca este binara c) forma uncurry d) forma curry 2. Fie E=((lx.ly.(y x) y) lx.x) => l=lambda Care afirmatie din cele de mai jos este corecta? a) forma normala a lui E este (y x) b) forma normala a lui E este lx.x c) forma normala a lui E este y d) expresia E este in forma normala 3. Fie expresiile: A=lx.ly.(x y) B=lx.x Care este afirmatia corecta? a) A nu este echivalenta computational cu B b) A este echivalenta computational cu B c) B este forma normala a lui A d) A este echivalenta structural cu B 4. Se presupune ca functia C de mai jos e nestricta. Care e rezultatul intors de f(1, f(0,0/0))? f(int x, int y){ return x? y:x;} a) rezultatul deepinde de implementare b) 1 c) 0 d) eroare ................................................................................................ Subiectele 4-8 nu am mai apucat sa le scriu... 9. Fie programul in Scheme. Care e valoarea aplicatiei (g 2)? (define f(lambda(x) (lambda(y) (lista x y)))) (define g(lambda(x) (f x))) (g 2) a) (2 #) b) #procedure c) (1 2) d) eroare 10. Fie graful G construit astfel: (define G (letrec ((a (lambda() (cons 'a (delay a))))) (a))) (define next (lambda(G) ((force (cdr G))))) Cum arata G? a) b) c) d) aici erau diverse versiuni de grafuri 11. Fie graful G: (define legare (lambda (constructie) (letrec ((loc (constrtuctie (lambda() loc)))) loc))) (define G (legare (lambda (loc) (cons 'a loc)))) Ce intoarce testul (eq? G ((cdr G))) ? a) eroare b) evaluarea nu se terimina pt. ca G e ciclic c) #t d) #f 12. Ce valoare are expresia: (let ((x (call/cc (lambda c1) (+ 1 (call/cc (lambda (c2) (c1 c2)))) 1)))) (if (procedure? x) (x 1) x) a) evaluarea nu se termina b) 1 c) 2 d) 3 13. Fie definitia: (define ff ((lambda(x) (let ((d (delay (set! x (- x 1))))) (cons (lambda() x) (lambda() (force d) x)))) 2)) Ce valori sunt intoarse de: ((car ff)) ((cdr ff)) ((car ff)) ((cdr ff)) ((car ff)) ((cdr ff)) a) 2 1 1 1 1 1 b) 2 1 2 1 2 1 c) 2 2 2 2 2 2 d) eroare: parametrul x nu exista in momentul evaluarii expresiilor din secventa 14. Care este signatura functiei: fun x y -> x (y) () ? a) 'a->'b->unit->'c b) 'a->'b->unit c) ('a->unit->'b)->'a->'b d) signatura imposibila 15. Care e signatura functiei: fun f -> let f=(fun f->f) in ((f f) f)? a) 'a->'b->'b b) 'a->'a c) signatura imposibila d) '_a->'_a 16. Functia plus este varianta textual nerecursiva pentru calculul sumei a 2 numere naturale. Cum trebuie apelata functia? letrec Fix=fun f x -> f(Fix f) x;; let plus=Fix(fun this (x,y) -> if y=0 then x else succ (this (x, (pred y))));; a) plus(n,m) b) (plus n m) c) eroare: Fix e binar d) ((plus) n m) 17. Fie definitiile: let curry f=fun x y -> f(x,y) and uncurry f=fun(x,y) -> f x y and g(x,y)=(y,x);; let gg=(uncurry(curry curry))(g);; a) apelul (gg 1 2) intoarce (2,1) b) apelul gg(1,2) intoarce (2,1) c) signatura (uncurry(curry curry)) nu poate fi sintetizata d) eroare la executie, deoarece gg asteapta un singur parametru 18. Fie exceptia: Exception E of int -> int. Ce valoare calculeaza expresia: try raise(E (fun x->2*x)) with E(f)->f(2);; a) eroare: exceptiile nu pot fi functionale b) eroare la executie c) tipul expresiei nu poate fi sintetizat d) 4 19. Care este valoarea calculata de exppresia: fun() -> (fun x->x)(fun x->x)? a) polimorfic slaba b) polimorfic tare c) monomorfica d) aplicatia e eronata ca tip 20. Ce se intelege prin ordine normala de evaluare a parametrilor actuali ai unei functii? a) parametri actuali sunt evaluati de C inainte de a fi trtansferati functiei b) parametri actuali sunt evaluati doar cand e necesara valoarea lor in cursul evaluarii corpului functiei c) parametri actuali sunt evaluati "normal" de la stanga la dreapta d) parametri atuali sunt evaluati doar la cererea explicita a programatorului 21. Un arbore binar de tip alfa(semnul) Arb poate fi vid sau poate contine cheie de tip alfa. Un arbora este reprezentat ca in exemplele urmatoare: vid pentru arbore vid; nod(s,k,n) pentru arbore nevid cu s:alfa Arb, D:alfa Arb si k:alfa Care din tipurile Caml de mai jos descrie corect reprezentarea aleasa? a) type 'a Arb=(vid:unit; nod:('a Arb,'a,'a Arb));; b) type 'a Arb=vid(nod of ('a Arb*'a*'a Arb));; c) repprezentarea nu poate fi descrisa corect de un tip Caml d) type 'a Arb=vid|nod of ('a Arb,'a,'a Arb);; 22. Ce descrie tipul ('a->'b) list list? a) liste de liste de functii polimorfice b) liste de liste de functii slab polimorfice c) liste de functii care reintorc liste d) signatura este eronata 23. Ce este o corutina? a) o inchidere functionala capabila sa-si reia executia din punctul corespunzator celei mai recente reveniri din functie b) o subrutina capabila sa coopereze cu o alta subrutina pentru a realiza eficient operatii cu numere complexe. Una lucreaza cu partea rela, cealalta cu partea imaginara c) o subrutina care foloseste coprocesorul aritmetic al masinii de calcul d) o functie ce poate fi apelata numai dintr-o clona a ei 24. Fie constrtuctorul de exceptii E definit prin exception E of alfa(semn), unde alfa e un tip. Cum trebuie sa fie alfa pentru ca varificarea de tip a unui parametru ce utilizeaza E sa fie statica? a) polimorfic b) polimorfic slab c) monomorfic d) tipul nu este restrictionat 25. Ce rezultat intoarce reise(E()) unde exceptia E este exception E of unit;; a) false b) tuplul vid c) valoarea E() d) nimic Ne-a lasat tot 1h30