
Hi Ozgur, well, I am getting a list of tuples from a previous function, and they relate to edges in graphs, so I am not too keen to change that, although that could be possible. But I never worked with sets in Haskell, so will have to study. Regarding your suggestion - I have to study it, it is a bit advanced. First, I see there is no paramter to nubSym - I have never used that syntax, shouldn't there be something like nymSym (x:xs) or so? Second, obviously there is a local function, fix. I understand this: fix (a,b) | a > b = (b,a) but I am not sure how to interpret this: fix p = p. Where does p come from? How does haskell know that it relates to (a,b), or the x as parameter? Just asking for clarification ,as I am new to all this. Thanks M. On 9/28/2010 12:05 PM, Ozgur Akgun wrote:
Hi,
On 28 September 2010 10:33, Martin Tomko
mailto:martin.tomko@geo.uzh.ch> wrote: I have a list of (a,a) tuples, and am trying something like nub, but also matching for symmetrical tuples.
You can of course do this. One approach would be to simply 'fix' the tuples according to some ordering, and then use standard nub - or a better one.
But to me, the real question is this: If the order of your tuples to don't matter, do you actually need tuples? There are other types in which the order of the elements in a container does not change the meaning; such as a set. You may want to use a Set from Data.Set, or you can define a pair type in which ordering doesn't matter. It will end up being a cardinality restricted set type though.
If you just want to get it working, here is some code for the first option:
nubSym :: Ord a => [(a,a)] -> [(a,a)] nubSym = nub . map fix where fix (a,b) | a > b = (b,a) fix p = p
Cheers, Ozgur