--1 f1 xs ys = head (zipWith (/=) xs ys) -- f1 :: Eq a => [a] -> [a] -> Bool f2 g xs = map g (filter (< (head xs)) xs) -- f2 :: Ord a => (a -> b) -> [a] -> [b] --2 xs = 1 : f xs where f (z:zs) = z : f (map (+4) zs) --3 gray :: Int -> [String] gray 0 = [""] gray n = let xs = gray (n-1) in map ('0':) xs ++ map ('1':) (reverse xs) {- o equivalentemente gray :: Int -> [String] gray 0 = [""] gray n = [ '0' : x | x <- prev ] ++ [ '1' : x | x <- reverse prev ] where prev = gray (n-1) -} --4 --a) quitarArco g x y = [(w,z) | (w,z) <- g, w /=x || z /= y] -- quitarArco :: (Eq a, Eq b) => [(b,a)] -> b -> a -> [(b,a)] -- b) -- hayCamino :: Eq a => [(a,a)] -> a -> a -> Bool hayCamino g x y | x == y = True | null unpaso = False | otherwise = or [hayCamino (quitarArco g x w) w y | w <- unpaso] where unpaso = [ w | (z,w) <- g, z == x ] g = [(1,2),(2,3),(1,3),(3,4),(4,2),(5,6)]