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
>
>
- References:
- Compile. Not again
- From: Maxim <ab_def@prontomail.com>
- Compile. Not again