[Haskell-beginners] removing duplicate tuples (including symmetrical ones)

Martin Tomko martin.tomko at geo.uzh.ch
Tue Sep 28 05:57:28 EDT 2010


Hi Edgar,
thanks for the help. I wanted to first test with nub, but I still cannot 
get it to work. I cannot see any missing parenthesis, but I retyped it 
this way to check:

removeDuplTuples :: (Eq a) =>[(a,a)] -> [(a,a)]
removeDuplTuples [] = []
removeDuplTuples [b] = [b]
removeDuplTuples x:xs = nub(if ((snd x,fst x) `elem` xs) then 
(removeDuplTuples xs) else ([x] ++ removeDuplTuples xs))

still the same error

What am I missing?
Martin

On 9/28/2010 11:45 AM, edgar klerks wrote:
> >You forgot the parenthesis. Parse error in pattern usually means a 
> type in the input of one of your functions. Nub needs >elements that 
> can be equal.
>
> type has to be typo.
> On Tue, Sep 28, 2010 at 11:44 AM, edgar klerks <edgar.klerks at gmail.com 
> <mailto:edgar.klerks at gmail.com>> wrote:
>
>     Hi Martin,
>
>     You have some typos:
>
>     import Data.List
>     removeDuplTuples :: (Eq a) => [(a,a)] -> [(a,a)]
>
>     removeDuplTuples [] = []
>     removeDuplTuples [b] =
>     [b]                                                                                                                                    
>     -- using the syntactic sugar for single element in list
>     removeDuplTuples (x:xs) = nub (if elem (snd x,fst x) xs then
>     removeDuplTuples xs else [x] ++ removeDuplTuples xs)
>                                  --------
>     You forgot the parenthesis. Parse error in pattern usually means a
>     type in the input of one of your functions. Nub needs elements
>     that can be equal.
>
>     Nub is quitte inefficient, if your elements can be ordered, there
>     is a more efficient version. It is something like:
>
>     fmap head.group.sort $ [1,1,1,1,4,4,5,6,6,7,8,9]
>     [1,4,5,6,7,8,9]
>
>     But I haven't test it thoroughly.
>
>     Greets,
>
>     Edgar
>
>     On Tue, Sep 28, 2010 at 11:33 AM, Martin Tomko
>     <martin.tomko at geo.uzh.ch <mailto:martin.tomko at geo.uzh.ch>> wrote:
>
>         Hi all,
>         I apologize for spamming this forum so frequently, but there
>         is noone I can turn to around here...
>         I have a list of (a,a) tuples, and am trying something like
>         nub, but also matching for symmetrical tuples. I implemented
>         it using the template from delete from Prelude. Seems like my
>         typse signature has some troubles (Paarse error in pattern)
>         but I am not sure where the problem is.
>
>         removeDuplTuples :: [(a,a)] -> [(a,a)]
>         removeDuplTuples [] = []
>         removeDuplTuples [b] = [b]                                    
>                                                                      
>                                           -- using the syntactic sugar
>         for single element in list
>         removeDuplTuples x:xs = nub (if elem (snd x,fst x) xs then
>         removeDuplTuples xs else [x] ++ removeDuplTuples xs)
>
>         I assume the problem lies in elem (snd x,fst x) xs but I am
>         not sure how to rewrite it.
>
>         Thanks for all help,
>         Martin
>         _______________________________________________
>         Beginners mailing list
>         Beginners at haskell.org <mailto:Beginners at haskell.org>
>         http://www.haskell.org/mailman/listinfo/beginners
>
>
>


-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://www.haskell.org/pipermail/beginners/attachments/20100928/8ad5640c/attachment-0001.html


More information about the Beginners mailing list