Precio total
Enunciado
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
-- 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
Haskell
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
-- 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 |