Imię i Nazwisko: …………EGZAMIN Z PARADYGMATÓW PROGRAMOWANIA (Termin I, 12 czerwca 2014) Egzamin składa się z 15 pytań zamkniętych (test wielokrotnego wyboru, każde z pytań za 2 punkty, właściwe odpowiedzi należy zakreślać w kółko, wolno tylko raz zmienić wybór) oraz 5 pytań otwartych (każde za 4 punkty). Ocena: 26p-30p - 3 31p-35p - 3,5 36p-40p - 4 41p-45p - 4,5 46p-50p - 5 1. Do języków imperatywnych nie zaliczamy: a. Pascal b. Haskell c. C++ d. Lisp 2. Funkcją wbudowaną w język Haskell jest: a. length b. read c. putStrLn d. show 3. Typ [(Int,Int)] w Haskellu oznacza: a. listę liczb całkowitych o długości ograniczonej do b. parę list liczb całkowitych dwóch elementów c. listę par liczb całkowitych d. taki typ nie jest poprawny 4. Które użycie operatora dodawania jest w Haskellu poprawne? a. (+) 1 2 b. (+)(1, 2) c. 1 + 2 d. (((+) 1) 2) 5. Która lista w Haskellu nie jest poprawna: a. [1, 2, 3] b. [’a’,’l’,’a’] c. [[1], 2] d. [[’1’,’2’],[’a’]] 6. Wyrażenie sum $ map (^2) [3, 2, 1] daje w Haskellu: b. to wyrażenie jest niepoprawne a. liczbę 6 c. listę [9,4,1] d. liczbę 14 7. Nagłówek bibliotecznej funkcji length w Haskellu, która wyznacza długość dowolnej listy ma postać: a. length :: [Int] -> Int b. length :: [Int] -> [Int] c. length :: [a] -> a d. length :: [a] -> Int 8. Aby w Haskellu z listy list liczb całkowitych postaci [[1..20]] wybrać liczbę 1 możemy użyć polecenia: a. head (last [[1..20]]) b. head (head [[1..20]]) c. last (head [[1..20]]) d. last (last [[1..20]]) 9. Załóżmy, że program w Prologu zawiera jedną tylko klauzulę postaci: osoba(imie(a),nazwisko(b),adres(x,y,z)). Który zapytanie jest poprawne? a. osoba(X,Y,Z). b. osoba(X). c. osoba(imie(Z),nazwisko(Y),X). d. osoba(_,_,X). 10. Klasyczny operator "mniejsze lub równe" w Prologu, to: a. <= b. =< c. <== d. ==< 11. Zapytanie w Prologu postaci [X,Y|Z]=[1,2,3]. zwróci: a. false b. X=1, Y=[2,3], Z=[]. c. X=1, Y=2, Z=3. d. X=1, Y=2, Z=[3]. 12. Predykat napisany w Prologu do testowania czy lista podawana jako argument jest jednoelementowa może mieć postać: a. czyListaJeden([X]). b. czyListaJeden([_]). c. czyListaJeden([]). d. czyListaJeden([X|Y]). 13. Co zwróci zapytanie w Prologu postaci X is -3, Y is -X, Z is abs(X+Y). a. X=-3, Y=-3, Z=3. b. X=-3, Y=3, Z=3. c. false d. X=-3, Y=3, Z=0. 14. Operator odcięcia w Prologu oznaczany jest symbolem: a. % b. -:c. ! d. == 15. Wykonanie w Prologu zapytania member(5,[1,5,1]). zwróci: a. [1] b. true c. [5] d. false 2012 © Wydział Matematyki i Informatyki UŁ 1/2 Imię i Nazwisko: …………EGZAMIN Z PARADYGMATÓW PROGRAMOWANIA (Termin I, 12 czerwca 2014) 16. Wskaż 2 cechy podobne języków Prolog i Haskell. 17. Jakie znasz wbudowane typy w języku Haskell. Wymień co najmniej 5 i je omów. 18. Napisz funkcję listaLiczb w języku Haskell, która dla zadanej liczby całkowitej k: a) jeśli k>=0 - utworzy listę kolejnych parzystych liczb całkowitych z przedziału [-k,k], b) jeśli k<0 - utworzy listę kolejnych nieparzystych liczb całkowitych z przedziału [k,-k]. Np. listaLiczb 9 zwróci [-8,-6,-4,-2,0,2,4,6,8], a listaLiczb (-5) zwróci [-5,-3,-1,1,3,5]. 19. Wymień co najmniej dwa predykaty w języku Prolog, które służą do modyfikowania bazy wiedzy i omów ich działanie. 20. Napisz w Prologu predykat iloczynKwadratow(X,Y), który dla zadanej listy X zwróci pod Y iloczyn kwadratów jej elementów. Np. zapytanie iloczynKwadratow([4,-3,1],X). da w wyniku: X=144. 2012 © Wydział Matematyki i Informatyki UŁ 2/2