Re: Protecting from evaluation
- To: mathgroup at smc.vnet.net
- Subject: [mg14660] Re: Protecting from evaluation
- From: "Allan Hayes" <hay at haystack.demon.co.uk>
- Date: Sat, 7 Nov 1998 02:10:12 -0500
- References: <71q7mm$iu5@smc.vnet.net>
- Sender: owner-wri-mathgroup at wolfram.com
Carl,
I dont get the result that you suggest in the second part of your
message
Clear[li, v, w]
li = {v, w};
v = 20;
w = 25;
heldlist = Thread[HoldForm[li]]
li
Not {HoldForm[v], HoldForm[w]}. Because li is not evaluated.
Hence we get
{heldlist[[1]], ReleaseHold[heldlist[[1]]]}
{{20, 25}, {20, 25}}
Not {v,20}
Here are three attempts (all depend on using OwnValues[li]).
Extract[Hold[li] /. OwnValues[li], {1, 1},
Function[x, {ToString[Unevaluated[x]], x}, HoldFirst]]
{"v", 20}
Extract[Hold[li] /. OwnValues[li], {1, 1},
Function[x, {HoldForm[x], x}, HoldFirst]]
{v, 20}
{Extract[Hold[li] /. OwnValues[li], {1, 1}, HoldForm ], li[[1]]}
{v, 20}
Allan
---------------------
Allan Hayes
Mathematica Training and Consulting
www.haystack.demon.co.uk
hay at haystack.demon.co.uk
Voice: +44 (0)116 271 4198
Fax: +44 (0)870 164 0565
Carl Woll wrote in message <71q7mm$iu5 at smc.vnet.net>...
>Hi William,
>
>The problem with your first function is that ToString evaluates its
>argument before turning it into a string. Thus, if
>
>v=20;
>ToString[v]
>
>will return 20. If you really want to use ToString in this way, it is
>better to create your own function, as in
>
>ClearAll[HoldToString]
>SetAttributes[HoldToString, {HoldAll}] HoldToString[x_] :=
>ToString[Unevaluated[x]]
>
>However, what is wrong with the function HoldForm? For example,
>
>HoldForm[v]
>
>will display v, while it's FullForm is still HoldForm[v]. Thus,
>
>{HoldForm[v],v}
>
>will return
>
>{v,20}
>
>For the second part of your question, say you have a list
>
>li = {v,w}
>
>and then you set
>
>v=20;
>w=25;
>
>If I understand your question, you want to be able to display the
>unevaluated form of the first element of li. One idea is to use
>HoldForm again, as in
>
>heldlist=Thread[HoldForm[li]];
>
>which will have the FullForm
>
>List[HoldForm[v],HoldForm[w]]
>
>Then, if you want to print v and the value of v, you could do
>
>{heldlist[[1]], ReleaseHold[heldlist[[1]]]}
>
>or some suitable variant.
>
>Carl Woll
>Dept of Physics
>U of Washington
>
>On Mon, 2 Nov 1998, William B. Marks wrote:
>
>> To display variable names along with their values I can put them in
>> quotes first using
>>
>> quote[var_] := ToString[var]
>> SetAttributes[quote,HoldAllComplete].
>>
>> Then this works
>> quote[Unevaluated @ cVWGL]
>> cVWGL
>> but this fails
>> quote[cVWGL]
>> 20
>> but since this fails
>> Unevaluated /@ {cVThGL, cVWGL}
>> {Unevaluated[900], Unevaluated[20.]}
>>
>> I can't see a way to protect members of a list of variables except by
>> putting quotes around them by hand. Any suggestions?
>>
>>
>
>