Enunciado
-- Una función de precio determina el precio de cada elemento; por
-- ejemplo,
-- precioCI :: String -> Int
-- precioCI "leche" = 10
-- precioCI "mantequilla" = 18
-- precioCI "patatas" = 22
-- precioCI "chocolate" = 16
--
-- Definir la función
-- precioTotal :: (String -> Int) -> [String] -> Int
-- tal que (precioTotal f xs) es el precio total de los elementos de xs
-- respecto de la función de precio f. Por ejemplo,
-- precioTotal precioCI ["leche", "leche", "mantequilla"] == 38
-- precioTotal precioCI ["chocolate", "mantequilla"] == 34 |
-- Una función de precio determina el precio de cada elemento; por
-- ejemplo,
-- precioCI :: String -> Int
-- precioCI "leche" = 10
-- precioCI "mantequilla" = 18
-- precioCI "patatas" = 22
-- precioCI "chocolate" = 16
--
-- Definir la función
-- precioTotal :: (String -> Int) -> [String] -> Int
-- tal que (precioTotal f xs) es el precio total de los elementos de xs
-- respecto de la función de precio f. Por ejemplo,
-- precioTotal precioCI ["leche", "leche", "mantequilla"] == 38
-- precioTotal precioCI ["chocolate", "mantequilla"] == 34
Soluciones
-- 1ª solución (por comprensión):
precioTotal1 :: (String -> Int) -> [String] -> Int
precioTotal1 f xs = sum [precioCI x | x <- xs]
-- 2ª solución (por recursión):
precioTotal2 :: (String -> Int) -> [String] -> Int
precioTotal2 f [] = 0
precioTotal2 f (x:xs) = f x + precioTotal2 f xs
-- 3ª solución (por plegado)
precioTotal3 :: (String -> Int) -> [String] -> Int
precioTotal3 f = foldr g 0
where g x y = f x + y
-- 4ª solución (por plegado y lambda)
precioTotal4 :: (String -> Int) -> [String] -> Int
precioTotal4 f = foldr (\x y -> f x + y) 0
-- 5ª solución (por plegado y composición)
precioTotal5 :: (String -> Int) -> [String] -> Int
precioTotal5 f = foldr ((+) . f) 0 |
-- 1ª solución (por comprensión):
precioTotal1 :: (String -> Int) -> [String] -> Int
precioTotal1 f xs = sum [precioCI x | x <- xs]
-- 2ª solución (por recursión):
precioTotal2 :: (String -> Int) -> [String] -> Int
precioTotal2 f [] = 0
precioTotal2 f (x:xs) = f x + precioTotal2 f xs
-- 3ª solución (por plegado)
precioTotal3 :: (String -> Int) -> [String] -> Int
precioTotal3 f = foldr g 0
where g x y = f x + y
-- 4ª solución (por plegado y lambda)
precioTotal4 :: (String -> Int) -> [String] -> Int
precioTotal4 f = foldr (\x y -> f x + y) 0
-- 5ª solución (por plegado y composición)
precioTotal5 :: (String -> Int) -> [String] -> Int
precioTotal5 f = foldr ((+) . f) 0