Paradygmaty programowania/Test 11: Programowanie funkcyjne w Haskellu II

Z Studia Informatyczne
Wersja z dnia 16:56, 13 wrz 2006 autorstwa Rogoda (dyskusja | edycje)
(różn.) ← poprzednia wersja | przejdź do aktualnej wersji (różn.) | następna wersja → (różn.)
Przejdź do nawigacjiPrzejdź do wyszukiwania

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