-- 1 -- prodsum:: Num a => [a] -> (a,a) prodsum [] = (1,0) prodsum (x:xs) = (x*p,x+s) where (p,s)= prodsum xs -- 2 -- -- a) apFunPos :: (a -> a) -> Int -> [a] -> [a] apFunPos f p xs = take p xs ++ (f (xs!! p) : drop (p+1) xs) -- b) inc :: Num a => a -> Int -> [a] -> [a] inc c = apFunPos (+c) -- 3 -- data Arbol a = G a [Arbol a] foldG f g (G r hijos) = f r (g (map (foldG f g) hijos)) sumArb :: Arbol Integer -> Integer sumArb = foldG (+) sum a1 = G 1 [G 2 [G 5 [], G 6 [], G 7 []], G 3 [G 8 [], G 9 []], G 4 []] -- 4 -- -- g :: a -> b -> c -- f :: c -> d -- h x y = f (g x y) -- El tipo de h es a -> b -> d -- Es equivalente a 2) ya que si h x = f . (g x), entonces -- h x y = (f . (g x)) y = f ((g x) y) = f (g x y) -- 5 -- ciclica = 1 : map (+3) ciclica {- ^ denota flecha que sale hacia atrás y ´ donde llega la flecha ´1 : map (+3) ^ => 1 : ´((+3) 1) : map (+3) ^ => 1 : ´4 : map (+3) ^ => 1 : 4 : ´((+3) 4) : map (+3) ^ => 1 : 4 : 7 : map (+3) ^ => 1 : 4 : 7 : ´((+3) 7) : map (+3) ^ -}