Paradygmaty programowania/Test 11: Programowanie funkcyjne w Haskellu II
Test 11
Deklaracja data Nat = Zero | Nast Nat
deklaruje Zero jako element istniejącego wcześniej typu Nat
deklaruje Nast jako funkcję działającą na istniejącym wcześniej typie Nat
tworzy nowy typ o nazwie Nat; do typu tego należy m.in. element Zero
jest niepoprawna
Dla liczb naturalnych zdefiniowanych jak powyżej dodawanie f można określić pisząc f (x, Zero) \= x oraz:
f (x, Nast y) \= f (Nast x, y)
f (x, Nast y) \= Nast (f (x, y))
f (Nast x, Nast y) \= Nast (f (x, y))
f (Nast x, y) \= Nast (f (x, y))
Załóżmy, że mamy już zdefiniowane dodawanie liczb naturalnych f. Która z poniższych definicji poprawnie zdefiniuje operator dodawania liczb naturalnych w typowej dla Haskella postaci rozwiniętej? Pomijamy kwestię sygnatury.
+ \= curry f
+ \= f
(+) \= curry f
(+) \= f
Która definicja poprawnie określi funkcję f pobierającą pierwszy element pary? Pomijamy kwestię sygnatury.
f x y \= x
f (x, y) \= x
(f) x y \= x
(f) (x, y) \= x
Która lista jest niepoprawna?
[1, 2, 3]
[1, [2]]
[[1, 2, 3], [4, 5], [6]]
[[], []]
Operator ++ służy w Haskellu do:
łączenia list
obliczania długości listy
odwracania listy
nie ma takiego operatora
Wyrażenie map (+1) [1, 2, 3] daje w wyniku:
liczbę 4
liczbę 6
listę [2, 3, 4]
to wyrażenie jest niepoprawne
Wyrażenie filter (<0) [–1, 0, 1, -2] daje w wyniku:
liczbę -1
listę [-1, -2]
listę [0, 1]
to wyrażenie jest niepoprawne
Wyrażenie [(x, y) | x <- [1..4], y <- [1..3]] wytworzy:
listę o długości 4
listę o długości 12
parę liczb całkowitych (4, 3)
to wyrażenie jest niepoprawne
Wyrażenie [x + y | x <- [1..3], y <- [1..3]] wytworzy:
liczbę 6
listę o długości 5
listę o długości 9
to wyrażenie jest niepoprawne