MathGroup Archive 2005

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

Search the Archive

Re: Compile. Not again

  • To: mathgroup at smc.vnet.net
  • Subject: [mg56474] Re: [mg56470] Compile. Not again
  • From: yehuda ben-shimol <bsyehuda at gmail.com>
  • Date: Tue, 26 Apr 2005 21:52:29 -0400 (EDT)
  • References: <200504260534.BAA14453@smc.vnet.net>
  • Reply-to: yehuda ben-shimol <bsyehuda at gmail.com>
  • Sender: owner-wri-mathgroup at wolfram.com

You just need to use SetDelayed (:=)
that is
f := Compile[{}, Module[{L = {0}}, L[[1]]++; L]]
and it will behave as you expect
yehuda

On 4/26/05, Maxim <ab_def at prontomail.com> wrote:
> Here's what I get in version 5.1.0:
> 
> In[1]:= f = Compile[{}, Module[{L = {0}}, L[[1]]++; L]]
> 
> In[2]:= a = f[]
> 
> Out[2]= {1}
> 
> In[3]:= b = f[]
> 
> Out[3]= {2}
> 
> In[4]:= Table[f[], {3}]
> 
> Out[4]= {{5}, {5}, {5}}
> 
> In[5]:= {a, b}
> 
> Out[5]= {{5}, {5}}
> 
> Each subsequent call to f uses the modified value of L. This also affects
> Table and all the objects involved in assignments such as x = f[] (but not
> x = f[][[1]]), including DownValues[Out]. The problem might be related to
> deciding whether a and b point to the same shared object.
> 
> Maxim Rytin
> m.r at inbox.ru
> 
>


  • Prev by Date: NIntegrate and NDSolve
  • Next by Date: Re: Re: multiple choice IF condition
  • Previous by thread: Compile. Not again
  • Next by thread: Re: Compile. Not again