Paradygmaty programowania/Test 10: Programowanie funkcyjne w Haskellu I
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