Define the unzip
function, which takes a list of tuples and returns two lists, one with all the
first components and other one with the seconds. For example, unzip
[(1,2),(3,4)] =([1,3],[2,4]).
ListUtil.hs
{-# LANGUAGE BangPatterns #-} unzipCon :: [(a, a)] -> ([a], [a]) unzipCon [] = ([], []) unzipCon xs = unzipData [] [] xs unzipData :: [a] -> [a] -> [(a,a)] -> ([a], [a]) unzipData !xs !ys [] = (xs, ys) unzipData !xs !ys (d:ds) = unzipData (xs ++ [fst (d)] ) (ys ++ [snd (d)] ) ds
*Main> :load ListUtil.hs [1 of 1] Compiling Main ( ListUtil.hs, interpreted ) Ok, modules loaded: Main. *Main> *Main> unzipCon [(1,2), (3, 4)] ([1,3],[2,4]) *Main> *Main> unzipCon [(1,2), (3, 4), (5, 6)] ([1,3,5],[2,4,6]) *Main>
No comments:
Post a Comment