MathGroup Archive 2005

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

Search the Archive

Re: basic issue with do and :=


Hi David,
this may be confusing, but it is correct. Consider:
Do[b[i] :=a[i]+1, {i, 10}]
As you can read in the manual, Do temporarily sets i to 1,2..., 
effectively using Block. Outside Do, i has the original value.
However, := does not evaluate its right hand side, but stores it in 
unevaluated form. When you later use b[i],  i is evaluated to whatever 
value it has at this time.
sincerely, Daniel

David wrote:
> Hi all,
> 
> this works as (I) expected
> 
> -------------------------
> Do[a[i] = i, {i, 10}]
> Do[b[i] =a[i]+1, {i, 10}]
> -------------------------
> 
> While this doesn't:
> 
> --------------------------
> Do[a[i] = i, {i, 10}]
> Do[b[i] :=a[i]+1, {i, 10}]
> ---------------------------
> 
> [note ":=" instead of "=" on the second line].
> 
> namely the output is: "b[2]:=a[i]+1" for all i
> 
> 
> 
> Is there any compact way to define: "b[i] :=a[i]+1" for all i ?
> 
> 
> Thank you in advance,
> 
> David
> 


  • Prev by Date: Re: Strange error when using InequalityPlot3D
  • Next by Date: Re: Other Way than Print[] for Intermediate Results
  • Previous by thread: Re: basic issue with do and :=
  • Next by thread: Re: basic issue with do and :=