Definir la función
todosPares :: (a -> b -> c) -> [a] -> [b] -> [c] |
todosPares :: (a -> b -> c) -> [a] -> [b] -> [c]
tal que (todosPares f xs ys) es el resultado de aplicar la operación f a todos los pares de xs e ys. Por ejemplo,
todosPares (*) [2,3,5] [7,11] == [14,22,21,33,35,55]
todosPares (\x y -> x:show y) "ab" [7,5] == ["a7","a5","b7","b5"] |
todosPares (*) [2,3,5] [7,11] == [14,22,21,33,35,55]
todosPares (\x y -> x:show y) "ab" [7,5] == ["a7","a5","b7","b5"]
Soluciones
-- 1ª definición (por comprensión)
todosPares1 :: (a -> b -> c) -> [a] -> [b] -> [c]
todosPares1 f xs ys = [f x y | x <- xs, y <- ys]
-- 2ª definición (por recursión)
todosPares2 :: (a -> b -> c) -> [a] -> [b] -> [c]
todosPares2 _ [] _ = []
todosPares2 f (x:xs) ys = map (f x) ys ++ todosPares2 f xs ys
-- 3ª definición (recursión con auxiliar)
todosPares3 :: (a -> b -> c) -> [a] -> [b] -> [c]
todosPares3 f xs ys = aux xs where
aux [] = []
aux (x:xs) = map (f x) ys ++ aux xs
-- 4ª definición (recursión con auxiliar)
todosPares4 :: (a -> b -> c) -> [a] -> [b] -> [c]
todosPares4 f xs ys =
(foldr (\x zs -> map (f x) ys ++ zs) []) xs |
-- 1ª definición (por comprensión)
todosPares1 :: (a -> b -> c) -> [a] -> [b] -> [c]
todosPares1 f xs ys = [f x y | x <- xs, y <- ys]
-- 2ª definición (por recursión)
todosPares2 :: (a -> b -> c) -> [a] -> [b] -> [c]
todosPares2 _ [] _ = []
todosPares2 f (x:xs) ys = map (f x) ys ++ todosPares2 f xs ys
-- 3ª definición (recursión con auxiliar)
todosPares3 :: (a -> b -> c) -> [a] -> [b] -> [c]
todosPares3 f xs ys = aux xs where
aux [] = []
aux (x:xs) = map (f x) ys ++ aux xs
-- 4ª definición (recursión con auxiliar)
todosPares4 :: (a -> b -> c) -> [a] -> [b] -> [c]
todosPares4 f xs ys =
(foldr (\x zs -> map (f x) ys ++ zs) []) xs
Se puede imprimir o compartir con
2 soluciones de “Operación sobre todos los pares”