Paradygmaty programowania/Test 11: Programowanie funkcyjne w Haskellu II

From Studia Informatyczne

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