Aplicaciones alternativas
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
-- 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]