Re: Re: Mathematica language issues

*To*: mathgroup at smc.vnet.net*Subject*: [mg53018] Re: [mg53002] Re: Mathematica language issues*From*: DrBob <drbob at bigfoot.com>*Date*: Mon, 20 Dec 2004 06:34:35 -0500 (EST)*References*: <200412191114.GAA18018@smc.vnet.net>*Reply-to*: drbob at bigfoot.com*Sender*: owner-wri-mathgroup at wolfram.com

> Surprisingly, >> Compile[{}, Module[{x = 0}, While[x++, EvenQ[x]]; x]][] >> also outputs 1. It's not surprising. The value of x++ is 1 and that's not True, so While exits on the first iteration. >> Compile[{}, Module[{x = 0}, While[x++; EvenQ[x]]; x]][] >> outputs 2 >> This indicates EvenQ[x] is being evaluated with the current value of x In version 5.1, it returns 3. It should return 1, but CompoundExpression is sometimes deeply mysterious! Bobby On Sun, 19 Dec 2004 06:14:49 -0500 (EST), Bill Rowe <readnewsciv at earthlink.net> wrote: > On 12/18/04 at 3:59 AM, ruebenko at imtek.uni-freiburg.de (Oliver > Ruebenkoenig) wrote: > > >> Dear Maxim, > >>> All the typical issues with the Mathematica programming language >>> are still present in version 5.1: > >>> Compile[{}, >>> Module[{x = 0}, >>> While[x++; EvenQ[x] ]; >>> x >>> ]][] > >> Compile[{}, Module[{x = 0}, x++; While[EvenQ[x]]; >> x]][] > >> x++; EvenQ[x] is CompoundExpression[ x++, EvenQ[ x ] ] > >> While[ test ] needs a test not a CompoundExpression > > The usual syntax of While is While[test, expr] but While[test] is also allowed and test can be a compound expression. The issue is clearly related to how Mathematica evaluates the compound expression. > > Compile[{}, Module[{x = 0}, > While[EvenQ[x], x++]; x]][] > > outputs 1 as expected > > Surprisingly, > > Compile[{}, Module[{x = 0}, > While[x++, EvenQ[x]]; x]][] > > also outputs 1. I suspect if test becomes more complex, say a compound expression, deviating from the indicated syntax order won't continue to get the same result as using the expected order. > > Note, > > Compile[{}, Module[{x = 0}, > While[x++; EvenQ[x]]; x]][] >outputs 2 > > This indicates EvenQ[x] is being evaluated with the current value of x rather than the updated value resulting from x++. However, I still don't understand why Maxim's original code outputs 3. But I also don't see an issue. I am never surprised by unexpected output when I deviate from expected syntax. > -- > To reply via email subtract one hundred and four > > > > -- DrBob at bigfoot.com www.eclecticdreams.net

**References**:**Re: Mathematica language issues***From:*Bill Rowe <readnewsciv@earthlink.net>