[Date Index]
[Thread Index]
[Author Index]
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!?!**
| |