Take the 2-minute tour ×
Mathematica Stack Exchange is a question and answer site for users of Mathematica. It's 100% free, no registration required.

It is not surprising that DeleteDuplicates[{5,5.}] returns {5,5.} because DeleteDuplicates uses SameQ by default, and SameQ[5,5.] is False.

However, Equal[5,5.] is True, but DeleteDuplicates[{5,5.},Equal] still returns {5,5.}.

It is interesting to note that Union works properly, in that Union[{5,5.},SameTest->Equal] returns {5}, as expected.

Is this a bug, or am I missing something? I'm using version 9.

Update:

I realize that using the function #1==#2& will get it working, thanks for pointing this out.

However, my question really is "Is this a bug, or am I missing something?".

To illustrate this further, consider the following:

f[x__]:=Equal[x]
DeleteDuplicates[{5,5.},f]
(* {5} *)

In what capacity are f and Equal different? Or what is leading DeleteDuplicates to treat them differently? They both take an arbitrary number of inputs, which is what I originally thought was the problem.

share|improve this question
6  
I'm reporting this as a bug. –  Daniel Lichtblau Jan 23 '13 at 17:24
4  
But @Albert Retey, are you saying that you won't believe me in a comment, but you will in an answer? –  Daniel Lichtblau Jan 23 '13 at 17:40
6  
... it might also be of interest that this behavior is new to version 9, version 7 and 8 give the "expected" result... –  Albert Retey Jan 23 '13 at 17:41
2  
(Sigh) @Albert Retey, I forgot your country of origin... –  Daniel Lichtblau Jan 23 '13 at 17:44
11  
Meta question: If this question ever gets a duplicate, will we be able to delete it? –  Daniel Lichtblau Jan 23 '13 at 18:27

2 Answers 2

up vote 16 down vote accepted

As @Albert Retey remarked in a comment, a second argument of (just) Equal leads to a special case handler that, to me, seems overly ambitious. I reported it as a bug.

share|improve this answer
    
+1 but... raking in rep for confirming bugs may be the wrong incentive, WRI-wise? :-P –  Yves Klett Jan 24 '13 at 9:58
2  
My strategy has been to fix bugs/implement features, remain silent for weeks/months, and then miss the rep uptick when the new version ships because sleep started to look better than beating out intrepid explorers for reputation. Maybe I should rethink that... :) –  John Fultz Jan 24 '13 at 11:37
1  
@Yves Klett I'm as confused as you. Meanwhile other responses take real work and get maybe 2 upvotes. –  Daniel Lichtblau Jan 24 '13 at 15:13

You need to use :

DeleteDuplicates[{5, 5.}, Equal[#1, #2] &]
(* {5} *)
share|improve this answer
1  
Something like Unevaluated@Identity@Equal will work a bit faster I think –  Rojo Jan 23 '13 at 22:03

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.