RE: Sequence and Or
- To: mathgroup at smc.vnet.net
- Subject: [mg34212] RE: [mg34179] Sequence and Or
- From: "DrBob" <majort at cox-internet.com>
- Date: Thu, 9 May 2002 05:16:50 -0400 (EDT)
- Reply-to: <drbob at bigfoot.com>
- Sender: owner-wri-mathgroup at wolfram.com
Good explanation! We don't always EXPECT reasons that make sense.
Then, does
Or@@{expr1,expr2,...,exprn}
sacrifice that efficiency?
Bobby
-----Original Message-----
From: Andrzej Kozlowski [mailto:andrzej at platon.c.u-tokyo.ac.jp]
To: mathgroup at smc.vnet.net
Subject: [mg34212] Re: [mg34179] Sequence and Or
It seems to me this is just a matter of efficiency. Suppose you want to
evaluate Or[p1,p2,p3,...,pn] for some statements p1, p2 ...pn. It is
enough that just one pi is True for the answer to be true. So
Mathematica evaluates each statement in turn and stops whenever it finds
one that turns out to be true. This can produce a big gain in
efficiency, particularly if you sensibly arranged the statements so that
those more likely to be true come earlier. Of course for this sort of
thing to be of any use you need to have the HoldAll attribute otherwise
Mathematica would first evaluate all the statements even if only p1 was
true and easy to check and the rest hard.
Andrzej Kozlowski
Toyama International University
JAPAN
http://platon.c.u-tokyo.ac.jp/andrzej/
On Wednesday, May 8, 2002, at 11:54 PM, DrBob wrote:
> Thanks for the workaround! It makes me wonder, though, why Or should
> have the HoldAll attribute at all.
>
> Bobby
>
> -----Original Message-----
> From: Andrzej Kozlowski [mailto:andrzej at platon.c.u-tokyo.ac.jp]
To: mathgroup at smc.vnet.net
> Sent: Wednesday, May 08, 2002 5:27 AM
> To: drbob at bigfoot.com
> Cc: mathgroup at smc.vnet.net
> Subject: [mg34212] Re: [mg34179] Sequence and Or
>
> Compare:
>
> In[19]:=
> Or[Sequence@@{True,False,True}]
>
> Out[19]=
> Sequence[True,False,True]
>
> In[20]:=
> Or[Evaluate[Sequence@@{True,False,True}]]
>
> Out[20]=
> True
>
> In[21]:=
> Or[Sequence[True,False,True]]
>
> Out[21]=
> True
>
> The point is the HoldAll attribute of Or. Because of it, when you
enter
>
> Or[Sequence@@{True,False,True}] only a single argument is passed to
Or
> but Or with a single argument returns:
>
> In[22]:=
> Or[x]
>
> Out[22]=
> x
>
>
>
>
> On Wednesday, May 8, 2002, at 02:57 PM, DrBob wrote:
>
>> When I evaluate the following...
>>
>> {True,False,True}
>> Or@@%
>> Sequence@@%
>> Or[%]
>>
>> the outputs are:
>>
>> {True,False,True}
>> True
>> Sequence[True,False,True]
>> Sequence[True,False,True]
>>
>> while I had expected:
>>
>> {True,False,True}
>> True
>> Sequence[True,False,True]
>> True
>>
>> What am I missing?
>>
>> Bobby Treat
>>
>>
>>
>>
>>
>
>
>