Re: Problem with SetDelayed lhs:=rhs
- To: mathgroup at smc.vnet.net
- Subject: [mg128684] Re: Problem with SetDelayed lhs:=rhs
- From: Roland Franzius <roland.franzius at uos.de>
- Date: Sat, 17 Nov 2012 03:47:55 -0500 (EST)
- Delivered-to: l-mathgroup@mail-archive0.wolfram.com
- Delivered-to: l-mathgroup@wolfram.com
- Delivered-to: mathgroup-newout@smc.vnet.net
- Delivered-to: mathgroup-newsend@smc.vnet.net
- References: <k466r8$a8g$1@smc.vnet.net>
Am 29.09.2012 09:09, schrieb zahava.ginny at gmail.com: > An assignment using SetDelayed, lhs := rhs, maintains rhs in completely unevaluated form. > Thus, if k=5, say, the assignment > > In[1] = f[k,j_]:=rhs[k,j] > > yields > > In[2] = ?f > Global`f > f[5,j_]:=rhs[k,j] > > How can I force the k on the right hand side to be evaluated so that ?f will yield > f[5,j_]:=rhs[5,j] ? > > Of course, I could define f[5,j_] manually, but I want to automate the procedure over a range of values of k. > You can always override Hold-attibutes by Evaluate f[5,j_]:=Evaluate[rhs[k,j]] or simply using Set f[5,j_]=rhs[k,j] if rhs contains no variables with different values at definition and run time. In a most elegant way - a bit obscure for beginners - automated definition procedures prepare Lists with the two arguments of SetDelayed and apply SetDelayed to the inner List of pairs SetDelayed@@@( ({f[#,j_],rhs[#,j]}&) /@ Range[20] ) or ( (sd[f[#,j_],rhs[#,j]]&) /@ Range[20] )/. {sd -> SetDelayed} -- Roland Franzius