Re: Hold[], Evaluate[] and so forth.
- To: mathgroup at yoda.physics.unc.edu
 - Subject: Re: Hold[], Evaluate[] and so forth.
 - From: bert at netcom.com (Roberto Sierra)
 - Date: Wed, 13 Oct 93 11:53:04 -0700
 
<<
Dear MathGroup, I'm currently in a confused state regarding
the use of Hold[], Evaluate[] etc. Is there a good discussion
of this somewhere (apart from "Mma Book" which is a bit vague).
>>
I've only seen the explanation that appears in the MMA book.
However, by following a lot of the questions and answers that
are posed on the Mathgroup, sci.math.symbolic, and by looking
at various packages to see how Hold[], Unevaluated[], etc., are
used, you can gain quite a bit of insight.
<<
Specifically, I have the following problem: suppose I have a
string containing an expression. I want to get a exact copy
of that as an expression, without any evaluation. I can do:
ToHeldExpression[string]
but this puts a Hold[...] around the result. I can't see any
way of removing the Hold[] without the thing inside getting
evaluated.
>>
That's exactly what Hold[] does -- it *prevents* the inside
from being evaluated.  If you remove the Hold[], then the inside
gets crunched.  How else would you leave something unevaluated?
<<
On a more general level, is there a way to do an Evaluate[]
to some specified level of an expression, rather than
recursing all the way down?
>>
Perhaps the following session will give you some ideas...
(* The held expression *)
expr = ToHeldExpression["2+2+2*2*(2a+2b)+2+2"]
Hold[2 + 2 + 2 2 (2 a + 2 b) + 2 + 2]
(* Only hold expressions at level #3 -- see Map, MapAll, etc. *)
expr1 = ReleaseHold[Map[Hold,expr,{3}]]
           2
8 + Hold[2]  Hold[2 a + 2 b]
(* Only leave multiplications held *)
expr2 = ReleaseHold[
	expr /. Times -> (Hold[Times[##]] &)
]
8 + Hold[2 2 (Hold[2 a] + Hold[2 b])]
Hope this helps...
 \\|//                         "Television is a medium -- it is
  - -                           neither rare nor well done."
  o o                                            -- Ernie Kovacs
   J   roberto sierra
   O   tempered microdesigns    NOTICE:
  \_/  san francisco, ca        The ideas and opinions expressed
       bert at netcom.com          herein are not those of the author.