Menu Close

Precio total

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

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
Posted in Inicial

3 Comments

  1. Rafa
    precioTotal :: (String -> Int) -> [String] -> Int
    precioTotal f xs = sum (map f xs)
  2. Jesús Camacho Moro
    precioTotal :: (String -> Int) -> [String] -> Int
    precioTotal f [] = 0
    precioTotal f (x:xs) = f x + precioTotal f xs
  3. Jesús Navas Orozco
    -- Por recursión:
     
    precioTotal :: (String -> Int) -> [String] -> Int
    precioTotal f [] = 0
    precioTotal f (xs:xss) = f xs + precioTotal f xss
     
    --Por comprensión (equivale a usar la función map)
     
    precioTotal1 :: (String -> Int) -> [String] -> Int
    precioTotal1 f xss = sum [f xs| xs<- xss]

Escribe tu solución

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.