Re: Re: What is going on!?!
- To: mathgroup at smc.vnet.net
- Subject: [mg104768] Re: [mg104748] Re: [mg104688] What is going on!?!
- From: Joe Hays <hays.joe at gmail.com>
- Date: Mon, 9 Nov 2009 05:45:11 -0500 (EST)
- References: <200911071146.GAA09847@smc.vnet.net>
Thanks all. Pretty dump mistake... <sheepish grin> On Sun, Nov 8, 2009 at 6:49 AM, Murray Eisenberg <murray at math.umass.edu>wrote: > The reference page for For says, "Unless an explicit Return is used, the > value returned by For is Null." > > Your inclusion of the final semicolon inside the For doesn't change > that. In fact, there's no reason for that semicolon: remember, in > Mathematica, a semicolon is NOT a line terminator; rather, it is a > separator for forming compound expressions, and an expression such as > expr1; expr2; means the same thing as expr1; expr2; Null. > > Ordinarily, when an expression returns a Null, it is suppressed in the > output. As in: > > 1+1; (* means same thing as 1+1; Null *) > > However, you don't have just the Null-returning For expression, but you > multiply its result by x. And so Mathematica does exactly what you asked > it to do, namely, to multiply that returned value Null by the current > value x, namely 10. And Mathematica sorts the factors of the product in > its usual way, outputting 10 Null rather than Null 10. > > To obtain as result just the current value (10) of x after the loop > terminates, you can do one of two things: > > (* Version 1: put x on a separate line *) > x = 0; > For[i = 1, i <= 10, i++, x = x + 1] > x > > (* Version 2: build compound expression ending in x *) > x = 0; > For[i = 1, i <= 10, i++, x = x + 1]; x > > (* Version 3: [same thing as Version 2!]: *) > x = 0; > For[i = 1, i <= 10, i++, x = x + 1]; > x > > What happens in those three ways is slightly different -- although not > different in the effect you see. In the first, the For returns one > result, a Null, which gets suppressed in output, and then the x returns > the 10. In the second, only the complete compound expression returns a > result, namely the value 10 of x. > > But why does your original version, which I condense here to... > > x = 0; > For[i = 1, i <= 10, i++, x = x + 1; ] x > > act differently from my first version? Because in my first version, > Mathematica keeps going swallowing one line after another until it > reaches the end of an entire, complete expression -- here with the final > ] of For, and it then evaluates that expression. But in your original > version, you have an (implicit) multiplication between the closing ] and > the x, so Mathematica keeps on swallowing until it reaches the end of > the line. > > Hope this helps. > > Joe Hays wrote: > > Can anyone tell me why the output is not a simple "10" instead of "10 > Null"? > > > > In[3]:= x = 0; > > For[i = 1, i <= 10, i++, > > x = x + 1; > > ] x > > > > Out[4]= 10 Null > > > > > > -- > Murray Eisenberg murray at math.umass.edu > Mathematics & Statistics Dept. > Lederle Graduate Research Tower phone 413 549-1020 (H) > University of Massachusetts 413 545-2859 (W) > 710 North Pleasant Street fax 413 545-1801 > Amherst, MA 01003-9305 > >
- References:
- What is going on!?!
- From: Joe Hays <joehays@vt.edu>
- What is going on!?!