IB015 Úvod do FP - termín-0 16. prosince 2013 Čas: 100 minut JMÉNO: místnost: UCO: souřadnice: Bezparametrová ("point free") definice funkce zwf x = zipWith x [1..3] [True, False, False] je A) zwf = (flip zipWith) [1..3] [True, False, False] B) zwf = flip ((flip zipWith) [1..3]) [True, False, False] C) zwf = ((flip zipWith).flip) [1..3] [True, False, False] D) zwf = zipWith (flip.flip) [1..3] [True, False, False] E) žádná z uvedených možností Příklad 1 -5/0/10 bodů Odpověď: Jaká je časová složitost výpočtu funkce prod3 s vzhledem k velikosti jejího parametru, tj. k délce Příklad 2 seznamu s? -5/0/10 drop : : Int -> [a] -> [a] bodů drop 0 z = z drop _[] = [] drop n (x:s) = drop (n-1) s prod3 :: [Integer] -> Integer prod3 [] = 1 prod3 (x:y) = x * prod3 (drop 2 y) A) konstantní B) logaritmická C) lineární D) kvadratická E) žádná z uvedených možností □ Odpověd: Intensionálním způsobem definujte seznam všech kladných lichých čísel takový, že každé liché číslo Příklad 3 a; se v seznamu vyskytuje právě tolikrát, kolik je zbytek po dělení čísla x číslem 12 (pro výpočet 10 bodů zbytku po dělení lze použít funkci ' mod'). Je dán datový typ Armáda reprezentující strukturu velení v hypotetické vojenské organizaci: Příklad 4 data Armáda = Vojak I Velitel [Armáda] 20 bodů a) Určete aritu nového typového konstruktoru ve výše uvedené definici [2b]. b) Definujte funkci nejvyssiSarze (včetně jejího typu), která pro hodnotu typu Armáda vrátí nej vyšší šarži velitele v armádě, tj. největší počet úrovní velení pod jedním velitelem. [18b] Šarže člena armády je definována takto: — Šarže řadového vojáka je 0. — Šarže velitele je 0, pokud velí prázdné armádě. — Šarže velitele je x+1, pokud velí armádě, ve které je nej vyšší šarže x. PROLOG: Zadefinujte predikát last(+Seznam,?Prvek), který se vyhodnotí na pravda, pokud Přiklad 5 Prvek je posledním prvkem v seznamu Seznam. 10 bodů PROLOG: Zakreslete kompletní výpočetní strom pro následující dotaz a databázi faktů. ?- a(X,Y),a(Y,X))!,b(Y,Z). a(l,2). a(2,2). a(l,l), b(2,l), b(2,2). Příklad 6 16 bodů