Re: Variable containing code
- To: mathgroup at smc.vnet.net
- Subject: [mg74976] Re: [mg74937] Variable containing code
- From: Daniel Huber <dh at metrohm.ch>
- Date: Fri, 13 Apr 2007 02:04:56 -0400 (EDT)
- References: <200704120847.EAA24473@smc.vnet.net> <461E1AE2.10008@wolfram.com> <461E27E1.1020406@metrohm.ch> <461E3773.2030403@wolfram.com>
Hello carl, thank's a lot, this was really helpfull. However, may I point out a mistake: the normal behaviour of a function is to strip "Unevaluated" inside the function body. You may convince yourself by e.g.: foo[x_]:=Print["x=",Hold[x]]; foo[Unevaluated[Print["Hello"]]] Therefore, why does SetDelayed not strip "Unevaluated"? Daniel Carl Woll wrote: > Daniel Huber wrote: > >> Hallo Carl, >> thank's a lot. I knew that there is some magic word around but I was >> not able to find it. >> However, this only solves half the problem. If I try: >> t1:=Print["Hello"]; >> Set[ t2, Extract[OwnValues[t1],{1,2},Unevaluated] ]; >> t2 does not evaluate the code, the reason is: >> Although OwnValues[t1] and OwnValues[t2] return similar results, >> Information (??) returns different results, namely: t1:=Print[Hello] >> and t2=Unevaluated[Print[Hello]] >> It looks like Set did not strip the "Unevaluated". Does Set not >> behave like a normal function? > > Well, presumably you meant to use SetDelayed instead of Set. However, > if you replace Set (or SetDelayed) by foo, you get the same behavior: > > In[6]:= foo[t2, Extract[OwnValues[t1], {1, 2}, Unevaluated]] > > Out[6]= foo[t2, Unevaluated[Print["Hello"]]] > > So, no functions strip the Unevaluated. There are many ways to get t2 > to have the same Information as t1, here are a couple: > > OwnValues[t1] /. _HoldPattern->t2 /. RuleDelayed->SetDelayed > > Function[rhs, t2:=rhs,HoldAll]@@Extract[OwnValues[t1],{1,2},Hold] > > Carl Woll > Wolfram Research > >> Daniel > >> >> Carl Woll wrote: >> >>> dh wrote: >>> >>>> Hello, >>>> >>>> how can one get at the value of a variable if this value is executable >>>> code? E.g. consider variable t1:= Print["Hello"]. How can I set the >>>> value of a second variable t2 to the value of t1 without executing >>>> the code? >>>> >>>> Daniel >>>> >>>> >>>> >>>> >>> Try OwnValues[t1] >>> >>> Carl Woll >>> Wolfram Research >>> >>> >> >> > > > -- Daniel Huber Metrohm Ltd. Oberdorfstr. 68 CH-9100 Herisau Tel. +41 71 353 8585, Fax +41 71 353 8907 E-Mail:<mailto:dh at metrohm.ch> Internet:<http://www.metrohm.ch>
- References:
- Variable containing code
- From: dh <dh@metrohm.ch>
- Variable containing code