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.

```

• Prev by Date: automatic coefficient / summand extraction
• Next by Date: Student version of Mathematica?
• Previous by thread: Re: Hold[], Evaluate[] and so forth.
• Next by thread: Re: Hold[], Evaluate[] and so forth.