MathGroup Archive 2007

[Date Index] [Thread Index] [Author Index]

Search the Archive

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>



  • Prev by Date: Re: Solving periodic functions
  • Next by Date: Re: bug in Integrate (5.2) (Fullani's integral)
  • Previous by thread: RE: Variable containing code
  • Next by thread: Re: Variable containing code