-- 1 eliminAlgunos :: Integral a => [a] -> [a] eliminAlgunos ys = aux [] ys aux :: Integral a => [a] -> [a] -> [a] aux [] []= [] aux [] (x:xs) = if ((x `mod` 2)==0) then (x: aux [x] xs) else (x: aux [] xs) aux [z] [] = [] aux [z] (x:xs) | (x `mod` 2)==0 = x: aux [x] xs | (x `mod` 2)==1 = if (z a -> [a] -> [a] f1 a xs = takeWhile (/= a) xs ++ [a] --f2 :: (a->c)->(b->d)-> (a,b)->(c,d) f2 g h (x,y) = (g x, h y) -- f3 :: Ord a => b -> (a -> c) -> [a] -> [c] f3 g h (x:xs) = [ h y | y<-xs, x<=y] --3 r1 b= iterate g b where g x= 1/2 * (x+b/x) r2 b= zs where zs = b:map g zs g x= 1/2 * (x+b/x) --5 data ConCad a = Nil | Unit a | Cad (ConCad a) (ConCad a) instance (Eq a) => Eq (ConCad a) where l1==l2 = lista l1 == lista l2 lista Nil = [] lista(Unit x) = [x] lista (Cad l1 l2) = lista l1 ++ lista l2 primero l | l==Nil = error " lista vacia" | otherwise = head (lista l) primero' l | xs == [] = error " lista vacia" | otherwise = head xs where xs = lista l primero'' Nil = [] primero'' (Unit x) = x primero'' (Cad xs ys) | xs==Nil = primero'' ys | otherwise = primero'' xs numElementos = length.lista k0= Nil k1= Cad Nil (Unit 'p') k2= Unit 'p' k3= Cad (Unit 'p') (Cad (Unit 'r') (Unit 's')) k4= Cad (Cad (Unit 'p') (Unit 'r')) (Unit 's') k5= Cad (Unit 'p') (Unit 'r') k6= Cad (Unit 'r') (Unit 'p')