Paradygmaty programowania/Test 11: Programowanie funkcyjne w Haskellu II: Różnice pomiędzy wersjami

Z Studia Informatyczne
Przejdź do nawigacjiPrzejdź do wyszukiwania
Rogoda (dyskusja | edycje)
Nie podano opisu zmian
 
Wkm (dyskusja | edycje)
 
Linia 11: Linia 11:
<quiz type="exclusive">
<quiz type="exclusive">
Dla liczb naturalnych zdefiniowanych jak powyżej dodawanie f można
Dla liczb naturalnych zdefiniowanych jak powyżej dodawanie f można
określić pisząc f (x, Zero) \= x oraz:
określić pisząc f (x, Zero) = x oraz:
<wrongoption reply="Źle">f (x, Nast y) \= f (Nast x, y)</wrongoption>
<wrongoption reply="Źle">f (x, Nast y) = f (Nast x, y)</wrongoption>
<rightoption reply="Dobrze">f (x, Nast y) \= Nast (f (x, y))</rightoption>
<rightoption reply="Dobrze">f (x, Nast y) = Nast (f (x, y))</rightoption>
<wrongoption reply="Źle">f (Nast x, Nast y) \= Nast (f (x, y))</wrongoption>
<wrongoption reply="Źle">f (Nast x, Nast y) = Nast (f (x, y))</wrongoption>
<wrongoption reply="Źle">f (Nast x, y) \= Nast (f (x, y))</wrongoption>
<wrongoption reply="Źle">f (Nast x, y) = Nast (f (x, y))</wrongoption>
</quiz>
</quiz>


Linia 21: Linia 21:
Załóżmy, że mamy już zdefiniowane dodawanie liczb naturalnych f.
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.
Która z poniższych definicji poprawnie zdefiniuje operator dodawania liczb naturalnych w typowej dla Haskella postaci rozwiniętej? Pomijamy kwestię sygnatury.
<wrongoption reply="Źle">+ \= curry f</wrongoption>
<wrongoption reply="Źle">+ = curry f</wrongoption>
<wrongoption reply="Źle">+ \= f</wrongoption>
<wrongoption reply="Źle">+ = f</wrongoption>
<rightoption reply="Dobrze">(+) \= curry f</rightoption>
<rightoption reply="Dobrze">(+) = curry f</rightoption>
<wrongoption reply="Źle">(+) \= f</wrongoption>
<wrongoption reply="Źle">(+) = f</wrongoption>
</quiz>
</quiz>


Linia 30: Linia 30:
Która definicja poprawnie określi funkcję f pobierającą pierwszy element
Która definicja poprawnie określi funkcję f pobierającą pierwszy element
pary? Pomijamy kwestię sygnatury.
pary? Pomijamy kwestię sygnatury.
<wrongoption reply="Źle">f x y \= x</wrongoption>
<wrongoption reply="Źle">f x y = x</wrongoption>
<rightoption reply="Dobrze">f (x, y) \= x</rightoption>
<rightoption reply="Dobrze">f (x, y) = x</rightoption>
<wrongoption reply="Źle">(f) x y \= x</wrongoption>
<wrongoption reply="Źle">(f) x y = x</wrongoption>
<wrongoption reply="Źle">(f) (x, y) \= x</wrongoption>
<wrongoption reply="Źle">(f) (x, y) = x</wrongoption>
</quiz>
</quiz>



Aktualna wersja na dzień 22:02, 23 wrz 2006

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