Re: Union - simple question
- To: mathgroup at smc.vnet.net
- Subject: [mg49086] Re: Union - simple question
- From: ab_def at prontomail.com (Maxim)
- Date: Wed, 30 Jun 2004 05:34:31 -0400 (EDT)
- References: <cbol4e$4e0$1@smc.vnet.net> <cbrcmd$is6$1@smc.vnet.net>
- Sender: owner-wri-mathgroup at wolfram.com
koopman at sfu.ca (Ray Koopman) wrote in message news:<cbrcmd$is6$1 at smc.vnet.net>...
> It looks like Union first sorts the list, and then uses SameTest only to
> check adjacent elements (which it passes to SameTest in reverse order!).
That was how Union used to work in earlier versions, but not anymore:
In[1]:=
Union[{a, c, b, a}, SameTest -> ((Print[{##}]; False) &)]
{a, a}
{b, a}
{b, a}
{c, b}
{c, a}
{c, a}
Out[1]=
{a, a, b, c}
Online documentation (
http://support.wolfram.com/mathematica/kernel/Symbols/System/Union.html
) still says that only adjacent elements are compared, but that's not
true about Mathematica 5.0: as we can see, now Union honestly performs
n(n-1)/2 comparisons.
Another point is that SameTest->Automatic is something rather obscure,
it is not the same as SameTest->SameQ or SameTest->Equal:
In[2]:=
Union[{1`20, 1`30}]
Union[{1`20, 1`30}, SameTest -> SameQ]
Out[2]=
{1.0000000000000000000, 1.00000000000000000000000000000}
Out[3]=
{1.0000000000000000000}
Definitely there are grounds for confusion.
Maxim Rytin
m.r at inbox.ru