haskell - Remove duplicates from list -
i have datatype:
data sidestype = sides int int int deriving (show) and need function list of sidestype , remove duplicates it.
*main> let = [sides 3 4 5,sides 3 4 5,sides 5 12 13,sides 6 8 10,sides 6 8 10,sides 8 15 17,sides 9 12 15,sides 5 12 13,sides 9 12 15,sides 12 16 20,sides 8 15 17,sides 15 20 25,sides 12 16 20,sides 15 20 25] *main> removeduplicatefromlist [] [sides 3 4 5,sides 5 12 13,sides 6 8 10,sides 6 8 10,sides 8 15 17,sides 9 12 15,sides 5 12 13,sides 9 12 15,sides 12 16 20,sides 8 15 17,sides 15 20 25,sides 12 16 20,sides 15 20 25] here solution:
removeelementfromlist :: [sidestype] -> sidestype -> [sidestype] removeelementfromlist lst element = let (sides b c) = element in [(sides x y z) | (sides x y z) <- lst, (x /= a) || (y /= b)] removeduplicatefromlist :: [sidestype] -> [sidestype] -> [sidestype] removeduplicatefromlist inlist outlist | (length outlist) == 0 = inlist | otherwise = let element = head outlist b = tail outlist filtered = removeelementfromlist b element in removeduplicatefromlist (inlist ++ [element]) filtered i wondering if there other way write code in more haskell-way ?
as usual there "by" function adds flexibility:
nubby :: (a -> -> bool) -> [a] -> [a] ps although it's o(n^2)
Comments
Post a Comment