Precio total
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