MathGroup Archive 2009

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

Search the Archive

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
>
>



  • Prev by Date: Re: Simplification problem
  • Next by Date: Re: Text on a curve
  • Previous by thread: Re: What is going on!?!
  • Next by thread: Re: What is going on!?!