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

Popular posts from this blog

Add email recipient to all new Trac tickets -

400 Bad Request on Apache/PHP AddHandler wrapper -

php - Change action and image src url's with jQuery -