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? >> >> > >