RE: Re: build-in commutativity
- To: mathgroup at smc.vnet.net
- Subject: [mg36731] RE: [mg36721] Re: build-in commutativity
- From: "DrBob" <drbob at bigfoot.com>
- Date: Sat, 21 Sep 2002 02:21:56 -0400 (EDT)
- Reply-to: <drbob at bigfoot.com>
- Sender: owner-wri-mathgroup at wolfram.com
Although And and Or don't have to evaluate all their arguments, I find that this is useless in many situations I run into. For instance, I might have a long list 'boolList' of Boolean expressions and I want to know if ANY of them are False, so I calculate And@@boolList In this situation, ALL the expressions in 'boolList' are calculated, even though the first may be False. Here's an example in which I overcome that: boolList = Hold[Print@#; PrimeQ@#] & /@ Range[3, 1000, 2]; ReleaseHold[And @@ boolList] 3 5 7 9 False Bobby Treat -----Original Message----- From: Carl K. Woll [mailto:carlw at u.washington.edu] To: mathgroup at smc.vnet.net Subject: [mg36731] [mg36721] Re: build-in commutativity Evgeni, Note that both "And" and "Or" can return a value without evaluating all of their arguments. For example, if the first argument to And is False, there is no reason to look at the other arguments. Suppose a user knows that one of the arguments is usually false, and so would like to look at that argument before any of the others, to avoid unneeded computations of the other arguments. He would put that argument first. If Mathematica turned around and sorted the arguments (which is what happens when a function is orderless), then that argument might end up being evaluated last. If the arguments take a significant amount of time to compute, then sorting first may cause the function to take much longer to evaluate. At any rate, if the above is not a concern for you, you may always change the attributes of And and Or to anything you want. Carl Woll Physics Dept U of Washington ----- Original Message ----- From: "Evgeni Trifonov" <algolog at yandex.ru> To: mathgroup at smc.vnet.net Subject: [mg36731] [mg36721] build-in commutativity > I'm curious, why the built-in boolean functions "And" and "Or" > aren't commutative? > > Attributes/@{Or,And}//ColumnForm > > {Flat, HoldAll, OneIdentity, Protected} > {Flat, HoldAll, OneIdentity, Protected} > > However, the arithmetical functions are "Orderless": > > Attributes/@{Plus,Times}//ColumnForm > > {Flat, Listable, NumericFunction, OneIdentity, Orderless, Protected} > {Flat, Listable, NumericFunction, OneIdentity, Orderless, Protected} > > ------------------- > Evgeni Trifonov > Vladivostok, Russia >