Re: Is this a bug?

*To*: mathgroup at smc.vnet.net*Subject*: [mg32061] Re: [mg32047] Is this a bug?*From*: Rob Pratt <rpratt at email.unc.edu>*Date*: Fri, 21 Dec 2001 03:57:34 -0500 (EST)*Sender*: owner-wri-mathgroup at wolfram.com

On Thu, 20 Dec 2001, Paul van Wamelen wrote: > Is the following a bug? > > Mathematica 4.1 for Sun Solaris > Copyright 1988-2000 Wolfram Research, Inc. > -- Motif graphics initialized -- > > In[1]:= k[x_] := Module[{},Print["hallo world"];x]; > > In[2]:= a[5] = 0; > > In[3]:= a[k[5]]++ > hallo world > hallo world > > Out[3]= 0 > > > I would have expected only one "hallo world" and it would seem to be > more efficient to only evaluate the k[5] once... > > The above example is not important but in the form below it had me > baffled for a while: > > In[4]:= tst[n_] := Module[{a}, > a[0] = a[1] = 0; > Do[a[Random[Integer,{0,1}]]++,{n}]; > {a[0],a[1]}] > > In[5]:= tst[50] > > Out[5]= {24, 24} > > (Does not add up to 50!) > > Thanks! I encountered the second form just two days ago. I'll leave it to somebody else to explain the above behavior, but I ended up using a workaround like the following. tst[n_] := Module[{a, r}, a[0] = a[1] = 0; Do[(r = Random[Integer,{0,1}]; a[r]++), {n}]; {a[0],a[1]}] Rob Pratt Department of Operations Research The University of North Carolina at Chapel Hill rpratt at email.unc.edu http://www.unc.edu/~rpratt/