Tell me more ×
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 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 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 at 17:41
2  
(Sigh) @Albert Retey, I forgot your country of origin... – Daniel Lichtblau Jan 23 at 17:44
10  
Meta question: If this question ever gets a duplicate, will we be able to delete it? – Daniel Lichtblau Jan 23 at 18:27
show 9 more comments

2 Answers

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 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 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 at 15:13
If the rep implications bother you, you can make the answer community wiki. Then we do have an answer (the question is off the unanswered list) and no one can argue about the rep gain. (Personally I do not care about rep score any more, either about my own or about others') – Szabolcs Mar 25 at 20:23
@Szabolcs How do I make it community wiki? – Daniel Lichtblau Mar 25 at 20:27
show 1 more comment

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 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.