Producto de un número por una lista de números
El producto de un número natural x por una lista de números naturales ys es el número obtenido concatenando los productos de x por cada uno de los elementos de ys. Por ejemplo, el producto de 2 por [3,2,5] es 26410.
Definir la función
1 |
producto :: Integer -> [Integer] -> Integer |
tal que (producto x ys) es el producto de x por ys. Por ejemplo,
1 2 |
producto 2 [3,2,5] == 6410 producto 10 [3,2,5] == 302050 |
Soluciones
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
-- 1ª definición (por recursión): producto1 :: Integer -> [Integer] -> Integer producto1 x ys = read (aux x ys) where aux x [] = "" aux x (y:ys) = show (x*y) ++ aux x ys -- 2ª definición (por plegado): producto2 :: Integer -> [Integer] -> Integer producto2 x ys = read (aux x ys) where aux x = foldr (\y -> (++) (show (x * y))) "" -- 3ª definición (por comprensión) producto3 :: Integer -> [Integer] -> Integer producto3 x ys = read (concat [show (x*y) | y <- ys]) -- 4ª definición (con map) producto4 :: Integer -> [Integer] -> Integer producto4 x ys = read (concat (map (show . (x*)) ys)) -- 5ª definición (con concatMap) producto5 :: Integer -> [Integer] -> Integer producto5 x = read . concatMap (show . (x*)) |
2 Comentarios