Re: Return intermediate reference using Hold*****?
- To: mathgroup at smc.vnet.net
- Subject: [mg109592] Re: Return intermediate reference using Hold*****?
- From: Leonid Shifrin <lshifr at gmail.com>
- Date: Fri, 7 May 2010 06:29:12 -0400 (EDT)
Hi Adam, If you are willing to replace the Set with SetDelayed in the definition of GrassType (which you said you want to change from operation to operation), then there is a fairly simple solution: In[6]:= GrassA = 1 GrassB = 2 Out[6]= 1 Out[7]= 2 In[8]:= GrassType := GrassA And this is all you need to do: In[9]:= Hold[GrassType] /. OwnValues[GrassType] Out[9]= Hold[GrassA] You can of course use HoldForm instead of Hold, or generally any head with some Hold* attribute. If you want to convert to string, use something like ToString[HoldForm[GrassType] /. OwnValues[GrassType]]. Hope this helps. Regards, Leonid On Tue, May 4, 2010 at 2:29 PM, Adam <juneappal at gmail.com> wrote: > Hello - > > Supposing I have declared: > x = 1 > y = x > > Is there a function that can take y as an argument and return "x"? > > I would like to use it like this: > > > *** > GrassA = 1 > GrassB = 2 > GrassType = GrassA (*<---- I will toggle this for different model > runs*) > > (*Lots of code and calculations, followed by summary printout *) > > Print[Row[{"GrassType = ", HOLDLIKEFUNCTION[GrassType], "\tDepth = ", > h}]] > > > ***** > HoldForm[GrassType] returns "GrassType," instead of the desired > "GrassA." > > For now, I am using: > ****** > Clear[GrassA, GrassB] > Print[Row[{"GrassType = ", HOLDLIKEFUNCTION[GrassType], "\tDepth = ", > h}]] > ****** > > Which has the desired effect, so I am not desparate for a solution - > just wonder how other people would approach this. > > > >