MathGroup Archive 2009

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: What is going on!?!

  • To: mathgroup at smc.vnet.net
  • Subject: [mg104748] Re: [mg104688] What is going on!?!
  • From: Murray Eisenberg <murray at math.umass.edu>
  • Date: Sun, 8 Nov 2009 06:49:49 -0500 (EST)
  • Organization: Mathematics & Statistics, Univ. of Mass./Amherst
  • References: <200911071146.GAA09847@smc.vnet.net>
  • Reply-to: murray at math.umass.edu

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


  • Prev by Date: Re: fitting
  • Next by Date: Re: Function returns null
  • Previous by thread: Re: What is going on!?!
  • Next by thread: Re: Re: What is going on!?!