Paradygmaty programowania/Test 10: Programowanie funkcyjne w Haskellu I

From Studia Informatyczne

Test 10

Zapisany w Haskellu nagłówek f :: (Integer -> Integer) -> (Integer -> Integer) deklaruje f jako funkcję, której parametrami i wynikiem są:

parametr: funkcja biorąca liczbę całkowitą i zwracająca liczbę całkowitą, wynik: takaż funkcja

parametry: dwie liczby całkowite, wynik: dwie liczby całkowite

parametr: liczba całkowita, wynik: liczba całkowita i funkcja biorąca liczbę całkowitą i zwracająca liczbę całkowitą

taka deklaracja nie jest w Haskellu poprawna

Definicje funkcji, w których trzeba rozpatrzyć osobne przypadki, można w Haskellu zapisać na kilka sposobów. Który z wymienionych sposobów nie jest poprawny?

dopasowywanie do wzorca

dozory

if-then-else

switch

Haskellowy typ Integer obejmuje liczby całkowite mieszczące się:

w dwóch bajtach

w czterech bajtach

to zależy od implementacji

bez ograniczeń (Haskell przydziela dostępną pamięć w miarę potrzeby)

W nagłówku kw :: Num a => a -> a określamy typ parametru i wyniku funkcji kw jako:

Num

dowolny typ z klasy Num

dowolny typ, bez ograniczeń

ta deklaracja jest niepoprawna

Jeśli funkcja ma typ (Float, Float) -> Float, to po rozwinięciu będzie miała typ:

Float -> (Float -> Float)

Float -> (Float, Float)

(Float -> Float) -> Float

rozwinięcie nie jest w tym przypadku możliwe

Zapis Float -> Float -> Float jest interpretowany jako:

Float -> (Float -> Float)

Float -> (Float, Float)

(Float -> Float) -> Float

nawiasy są tu konieczne, nie można ich pominąć

Typ [(Integer,Integer)] oznacza:

listę liczb całkowitych o długości ograniczonej do dwóch elementów

listę par liczb całkowitych

parę list liczb całkowitych

taki typ nie jest poprawny

Które użycie operatora dodawania jest w Haskellu niepoprawne?

1 + 2

(+) 1 2

((+) 1) 2

(+)(1, 2)

Jeśli funkcja f jest typu Integer -> Integer -> Integer, to `f` (nazwa funkcji ujęta w odwrócone apostrofy) jest:

funkcją typu (Integer, Integer) -> Integer

funkcją typu (Integer -> Integer) -> Integer

operatorem, którego można używać infiksowo, np. 1 `f` 2

zapis taki jest niepoprawny

Zapis (3 +) oznacza:

funkcję typu Integer -> Integer

parę złożoną z liczby 3 i znaku plus

trzyargumentową wersję operatora dodawania

zapis taki jest niepoprawny