Re: If this isn't a bug . . .
- To: mathgroup at smc.vnet.net
- Subject: [mg102137] Re: If this isn't a bug . . .
- From: pfalloon <pfalloon at gmail.com>
- Date: Thu, 30 Jul 2009 05:33:54 -0400 (EDT)
- References: <h4p3ne$j8n$1@smc.vnet.net>
On Jul 29, 7:11 pm, AES <sieg... at stanford.edu> wrote:
> If this isn't a bug, sure seems like it should be!
>
> In[247]:= Do[y=2; y=3, {1}]
>
> In[248]:= %
>
> Out[248]= 3
>
> In[249]:= Do[y=4, {1}]
>
> In[250]:= %
>
> < No Out[250] >
That does seem bizarre. After experimenting a little, it seems like
the cause of this is in the behaviour of the CompoundExpression (";")
function (or operator).
(Note that the expression "y=2; y=3" has FullForm "CompoundExpression
[y=2, y=3]".)
>From the documentation for CompoundExpression: "expr1;expr2; returns
value Null. If it is given as input, the resulting output will not be
printed. Out[n] will nevertheless be assigned to be the value of
Subscript[expr, 2]. "
So, each time a CompoundExpression appears in an input In[n], it goes
and sets Out[n] to the output of its last non-Null argument. My guess
is that this happens regardless of whether you are inside a Do loop or
not.
This would explain why the following holds:
In[52]:= {Do[y=2, {1}]}
Out[52]= {Null}
In[51]:= {Out[-1]}
Out[51]= {Null}
Whether this should be considered a bug or an acceptable behaviour is
another question...
Note that a more desirable consequence of this CompoundExpression
behaviour is the following:
In[47]:= y = 3;
In[48]:= %
Out[48]= 3
Cheers,
Peter.