MathGroup Archive 1993

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

Search the Archive

Re: Hold[], Evaluate[] and so forth.

Dear MathGroup'ers 

Many thanks for the large amount of correspondence on this

The conclusion is that there isn't any way around the problem,
if you remove Hold[] the expression will be evaluated, and
any evaluation will recurse down through all the levels of 
the expression. So be it.

Now, I detect a certain sentiment among users that Mma's
evaluation code is rather aggressive, in that it pounces 
on anything left unprotected, and chews it up completely.

And this is exactly what you want to happen, for most of the
time. But there are situations where you don't want this:
let me give an explicit example. 

I'm writing a piece of code which takes a Mma expression
as an argument, processes it through TeXForm, merges that
with some LaTeX to make a runnable LaTeX file, which is
viewed with a DVI viewer on the screen. You can see that
this is potentially useful, in that it allows an inexperienced
computer user to get a translation of their Mma expressions
into standard mathematical form. You can also see that its
rather crucial that the original expression remains completely
unevaluated in the process, even to the point of simple
reordering of sub-expressions into canonical form.

By careful use of Hold[] and Evaluate[], I can get the effect
that I want, but its quite hard work to keep the evaluator
at bay. I'd like to suggest for a future version of Mma, that
when a user is programming Mma, (s)he should be allowed more
control over what the evaluator is going to do to with the
expressions involved. 

None of this is really relevant to the direct interactive 
use of Mma as a computer algebra engine. In fact, one
often wishes that the Mma evaluator could do more algebraic
simplifications than it actually does.

Phillip Kent
Transitional Mathematics Project
Maths Dept
Imperial College

  • Prev by Date: Graphics Input to Mma
  • Next by Date: automatic coefficient / summand extraction
  • Previous by thread: Hold[], Evaluate[] and so forth.
  • Next by thread: Re: Hold[], Evaluate[] and so forth.