Sari la conținut
EXAMS.RO

Paradigme de programare · 2012 · Sesiune

Profesor
Cristian Giumale
Anul examenului
2012
Sesiune
Sesiune
Serie
CA
Grupă
324
Adăugat
7 iunie 2012 de Sorina Sandu
Subiecte PP 07 Iunie 2012, 324 CA, din amintiri:

Grile:

1. Care din următoarele tipuri e polimorfic:

a) data Lista a = Vid ...

b) data Nat = Zero | Succ Nat

c) data Ceva = Constr | AltConstr

2. (lambda x.(x x) lambda y.(y y))

a) evaluarea normală se termină, ce aplicativă nu

b) se evaluează la (x y) (sau ceva asemănător)

c) nici evaluarea normală nici cea aplicativă nu se termină

3. (define x 5)

(define f (delay (let ((y = 1) (z = x)) (set! x (+ z y)))))

(begin (force f) (force f)) ; sau ceva de genul, ideea e că erau 2 force

Ce valoare are x la final:

a) 5

b) 6

c) 7

4. Haskel, tipuri la ceva de genul:

f x y = let (a:_) = x (sau aproximativ)

(încă ceva..)

in (a:y)

Chiar nu mai știu exact cum era, dar era destul de evidentă.

a) [a] -> [b] -> [a]

b) [a] -> [a] -> [b]

c) [a] -> [a] -> [a]

5. (deffacts facts (f 1) (f 2) (f 3))

(defrule r1

(declare (salience 1))

(f ?x)

=>

(assert (f ?x ?x)))

(defrule r2

(declare (salience 0))

?f <- (f $?)

=>

(retract ?f))

De câte ori se execută r2:

a) 3

b) 6

c) ciclează

6. Horn, echivalent în Prolog

(not g (x)) or (not g(y)) or f(x, y)

a) f(x, y) :- g(x), g(y).

b) g(x), g(y) :- f(x, y).

c) nu este o clauză Horn

7. Expresia:

p(x) and q(x) or (not q(x)) or (not p(x))

a) satisfiabilă

b) validă

c) nesatisfiabilă (sau un cuvânt asemănător)

8.

(define f (lambda (x) (lambda (y z) (x y z))))

Care dintre următoarele este o aplicație corectă:

a) ceva greșit

b) ceva greșit

c) ((f map) (lambda (x) x) \'(1, 2, 3))

Nici la asta nu mai știu exact variantele. Scuze.

9.

(define f

(lambda (x)

(let* ((f 5) (g (+f 4) și alte multe chestii unrelated) x))))

Ce returnează (f \'(1 2 3))?

a) \'(3 2 1)

b) \'(1 2 3)

c) \'(3 1 2)

10.

fold + 10 [1, 2, 3, 4, 5]

a) 25

b) 35

c) 15

Probleme:

1. Funcție în Scheme cu tail recursion care calculează suma primelor n numere.

2. CLIPS, se dau două seturi reprezentate ca:

(set-one 1 7 3 alte_numere)

(set-two 8 3 1 3 alte_numere)

(alte_numere chiar înseamnă alte numere, un număr finit de numere, care erau

precizate)

Să se scrie un program CLIPS care calculează intersecția celor 2 mulțimi.

Rezultatul putea fi reprezentat oricum vroiam, doar să povestim cum am ales

să reprezentăm.

3. Se dă:

(define c (lambda () (lambda (x) (force x))))

Folosind doar c (și paranteze) scrieți ceva care să forțeze (delay 3).

4. X = [H|T], H is 1, Y = [1, 2, 3], X = Y

Se poate satisface? Dacă da, care sunt legările, dacă nu de ce?

5. Se dă tipul:

data Lista a =

Vid | Cons a (Lista a)

Scrieți o funcție care returnează numărul de elem din listă și precizați

tipul funcției.

Rezolvări, deasemenea aproximative:

Grile - am păstrat ordinea în care le-am pus, în subiectul de examen erau în total altă ordine.

1. a)

2. c)

3. b)

4. c)

5. b)

6. a)

7. b)

8. c)

9. b)

10. a)

Probleme (nu am testat, posibile erori):

1.

(define SumN (lambda (n acc)

(if (eq? n 0)

acc

(SumN (- n 1) (+ acc n)))))

2.

(defrule r1

(set-one $? ?x $?)

(set-two $? ?x $?)

=>

(assert (intersect ?x)))

La final o să fie multe fapte (intersect ?x), și totalitatea lor reprezintă intersecția.

3.

((c) (delay 3))

4.

Da, T = [2, 3], X = [1, 2, 3]

5.

count Vid = 0

count Cons el li = 1 + (count li)

count:: Lista a -> Integer