Re: Subscripted variables and function definitions

*To*: mathgroup at smc.vnet.net*Subject*: [mg65265] Re: Subscripted variables and function definitions*From*: Peter Pein <petsie at dordos.net>*Date*: Thu, 23 Mar 2006 06:58:23 -0500 (EST)*References*: <dvdida$a26$1@smc.vnet.net> <dve4na$ffg$1@smc.vnet.net> <dvgskl$9rc$1@smc.vnet.net>*Sender*: owner-wri-mathgroup at wolfram.com

Geico Caveman schrieb: ... > Actually, that was a typo in my post. I am using X[[1]]/(X[[3]]+X[[4]]) and > I get what I described. > > Any ideas ? > Hi Geico, you propably want to Evaluate[] the definition: In[1]:= X = {x1, x2, x3, x4}; In[2]:= f[x1_, x2_, x3_, x4_] := X[[1]]/(X[[3]] + X[[4]]) In[3]:= f[1, 1, 1, 1] Out[3]= x1/(x3 + x4) In[4]:= g[x1_, x2_, x3_, x4_] := Evaluate[X[[1]]/(X[[3]] + X[[4]])] In[5]:= g[1, 1, 1, 1] Out[5]= 1/2 In[6]:= h[x1_, x2_, x3_, x4_] = X[[1]]/(X[[3]] + X[[4]]) Out[6]= x1/(x3 + x4) In[7]:= h[1, 1, 1, 1] Out[7]= 1/2 If you call f[1,1,1,1], Mathematica looks for occurances of x1..x4 in your definition of f and doesn't find any, because f is defined with SetDelayed (":="). _After_ this it takes X[[1]]/(X[[3]] + X[[4]]) and evaluates this expression. g is defined using SetDelayed too, but now Mathematica finds the patterns x1..x4 in the expression, replaces them by actual values and evaluates the result. h has been defined using Set. Set Evaluates its second argument _before_ assigning the result to a name. To see how Mathematica stores these three functions, enter ?f or ?g or ?h. A look at "The Mathematica Book" 2.5.8 might help too. Hope this helps, Peter