Aplicaciones alternativas
Enunciado
1 2 3 4 5 6 7 |
-- Definir la función -- alternativa :: (a -> b) -> (a -> b) -> [a] -> [b] -- tal que (alternativa f g xs) es la lista obtenida aplicando -- alternativamente las funciones f y g a los elementos de xs. Por -- ejemplo, -- alternativa (+1) (+10) [1,2,3,4] == [2,12,4,14] -- alternativa (+10) (*10) [1,2,3,4,5] == [11,20,13,40,15] |
Soluciones
[schedule expon=’2014-12-03′ expat=»06:00″]
- Las soluciones se pueden escribir en los comentarios hasta el 3 de diciembre.
- El código se debe escribir entre una línea con <pre lang=»haskell»> y otra con </pre>
[/schedule]
[schedule on=’2014-12-03′ at=»06:00″]
1 2 3 4 5 6 7 8 9 |
-- 1ª definición (por recursión): alternativa1 :: (a -> b) -> (a -> b) -> [a] -> [b] alternativa1 f g [] = [] alternativa1 f g (x:xs) = f x : alternativa1 g f xs -- 2ª definición (por comprensión): alternativa2 :: (a -> b) -> (a -> b) -> [a] -> [b] alternativa2 f g xs = [h x | (h,x) <- zip (cycle [f,g]) xs] |
[/schedule]
Ha costado, pero aquí hay una solución con sólo funciones de orden superior.
O más simple: