En aquest problema heu d’implementar una sèrie de funcions usant llistes per comprensió.
Feu una funció
myMap :: (a -> b) -> [a] -> [b] que emuli el
map usant llistes per comprensió.
Feu una funció
myFilter :: (a -> Bool) -> [a] -> [a] que emuli el
filter usant llistes per comprensió.
Feu una funció
myZipWith :: (a -> b -> c) -> [a] -> [b] -> [c]
que que emuli el zipWith usant llistes per comprensió i
zip.
Feu una funció
thingify :: [Int] -> [Int] -> [(Int, Int)] que,
donades dues llistes d’enters, genera la llista que aparella els
elements si l’element de la segona llista divideix al de la
primera.
Feu una funció factors :: Int -> [Int] que, donat
un natural no nul, genera la llista ordenada amb els seus factors (no
necessàriament primers).
Cada apartat puntua 20 punts.
Input
myMap (*2) [1..5] myFilter odd [1..5] myZipWith (*) [1..4] [1..4] thingify [1..6] [1..3] factors 24
Output
[2,4,6,8,10] [1,3,5] [1,4,9,16] [(1,1),(2,1),(2,2),(3,1),(3,3),(4,1),(4,2),(5,1),(6,1),(6,2),(6,3)] [1,2,3,4,6,8,12,24]