Re: Changing names of variables in a loop

*To*: mathgroup at smc.vnet.net*Subject*: [mg92218] Re: Changing names of variables in a loop*From*: Albert Retey <awnl at gmx-topmail.de>*Date*: Tue, 23 Sep 2008 07:33:07 -0400 (EDT)*References*: <gb7obt$ngj$1@smc.vnet.net>

kazik.lakomy at gmail.com wrote: > Hi, > do you know maybe is there a possibility to change a name of a > variable in a loop? I'm not exactly sure how to explain it, so maybe > instead of my words I paste a basic example that express my query: > > a1 = 1; a2 = 2; a3 = 3; > func[g_] := g; > Summ = 0; > > For[i = 1, i <= 3, i += 1, > Summa += func[ai]] > > So something like this... I have tried to deal with this like with > strings and have put func[a<>"i"] but it didn't work (quite logic). > The general problem is much more complicated, this is only a part of > it, so please do not suggest me how can I sum up three numbers, this I > believe I know :) I would very appreciate any hints, this does literally what you want: For[i = 1, i <= 3, i += 1, summ += func[ToExpression["a" <> ToString[i]]]] there are alternatives which save you from error prone typing of irrelevant code: summ = 0; Do[summ += func[ToExpression["a" <> ToString[i]]], {i, 3}] or: summ = Total[Table[func[ToExpression["a" <> ToString[i]]], {i, 3}]] if possible I would suggest to use different naming conventions for your variables if you need to generate them programmatically: a[1] = 1; a[2] = 2; a[3] = 3; which lets you reduce your code to: summ = 0; Do[summ += func[a[i]], {i, 3}] summ or even: summ=Total[Table[func[a[i]], {i, 3}]] or: Total[func /@ a /@ Range[3]] hth, albert