module Exercise_7 where import Data.List import Data.Ord {-WETT-} comp :: Eq b => [(Integer,(a,b))] -> [(Integer,(b,c))] -> [(Integer,(a,c))] comp r s = [(n+m,(a,d)) | (n,(a,b)) <- r , (m,(c,d)) <- s, b == c ] trancl :: Eq a => [(Integer,(a,a))] -> [(Integer,(a,a))] trancl ls = trancl_aux ((length ls) `div` 2) ls where trancl_aux n l = if n == 0 then remDup (sortBy (comparing fst) (ls ++ comp l l)) else trancl_aux (n-1) (remDup (sortBy (comparing fst) (ls ++ comp l l))) remDup :: Eq a => [(Integer,(a,a))] -> [(Integer,(a,a))] remDup [] = [] remDup ((n,(a,b)):ls) = (n,(a,b)) : remDup [ (m,(c,d)) |(m,(c,d)) <- ls, not (a == c && b == d) ] {-TTEW-}