Re: How to manipulate globals in a function?

*To*: mathgroup at smc.vnet.net*Subject*: [mg73703] Re: How to manipulate globals in a function?*From*: David Bailey <dave at Remove_Thisdbailey.co.uk>*Date*: Sun, 25 Feb 2007 04:33:07 -0500 (EST)*References*: <erop34$94v$1@smc.vnet.net>

davisjf at gmail.com wrote: > I am trying to write code to manipulate a global array in a function. > How do something like this: > > Moo [A_List, i_Integer] := > > A[[i]] = 7; > > Moo[A, 1] > > This fails. But, if I do this without a funciton it works. > > i=1 > A[[i]] = 7 > > JD > > Hello, As written, you end up executing something like: {1,1,1,1}[[1]]=7 because the argument A gets evaluated - so one way is to prevent that evaluation: SetAttributes[Moo, HoldFirst]; Moo[A_, i_Integer] := (A[[i]] = 7); Note that the first argument to Moo now matches a symbol, not a list, because it is no longer evaluated. David Bailey http://www.dbaileyconsultancy.co.uk