Aplicaciones de operaciones
Definir la función
1 |
aplicaciones :: [a -> b -> c] -> [a] -> [b] -> [c] |
tal que (aplicaciones os xs ys) es la lista obtenida aplicando las operaciones de os a los elementos de xs es ys. Por ejemplo,
1 2 3 4 5 6 7 8 9 |
λ> aplicaciones [(+),(*)] [1,2] [5,8] [6,9,7,10,5,8,10,16] λ> aplicaciones [(+),(*)] [1,2] [5] [6,7,5,10] λ> aplicaciones [(<),(>)] ["ab","c"] ["def","c"] [True,True,True,False,False,False,False,False] λ> import Data.List λ> aplicaciones [(++),intersect] ["ab","c"] ["bd","cf"] ["abbd","abcf","cbd","ccf","b","","","c"] |
Soluciones
1 2 3 4 5 6 7 8 9 10 11 12 |
-- 1ª definición aplicaciones :: [a -> b -> c] -> [a] -> [b] -> [c] aplicaciones os xs ys = [os x y | os <- os, x <- xs, y <- ys] -- 2ª definición aplicaciones2 :: [a -> b -> c] -> [a] -> [b] -> [c] aplicaciones2 os xs ys = os <*> xs <*> ys -- 3ª definición aplicaciones3 :: [a -> b -> c] -> [a] -> [b] -> [c] aplicaciones3 = ((<*>) .) . (<*>) |
Usando functores aplicativos
Eliminando los argumentos en la definición anterior