MathGroup Archive 2009

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

Search the Archive

Re: HoldForm in defined function doesn't seem to work

  • To: mathgroup at smc.vnet.net
  • Subject: [mg99224] Re: HoldForm in defined function doesn't seem to work
  • From: David Bailey <dave at removedbailey.co.uk>
  • Date: Thu, 30 Apr 2009 06:23:00 -0400 (EDT)
  • References: <gt9aki$q22$1@smc.vnet.net>

joel.aufgang at gmail.com wrote:
> I'm struggling to understand why this doesn't work:
> 
> 
> f[x_] = HoldForm[x];
> HoldForm[123 456 789] (* returns "123 x 456 x 789" *)
> f[123 456 789] (* returns"44253432" *)
> 
> I don't understand why the two results are different.   Is there a
> special trick I need to do to be able to define f so that the HoldForm
> works?
> 
> I'm using this to help visualize the way a notebook represents typed
> expressions, so I'm trying to do something like this:
> 
> BoxTree[expr_] := TreeForm[ToBoxes[HoldForm[expr]][[1]]];
> a b c d e // BoxTree
> 123 456 789 // BoxTree (* want this to show as a RowBox like the
> previous example *)
> 
> 
> Any help would be greatly appreciated.  Thanks.
> 
You need to define f to have the HoldAll attribute - otherwise its 
argument is evaluated long before it becomes the argument to HoldForm!

SetAttributes[f,HoldAll];

If you are interested in working with held expressions, it is worth 
reading around the subject, and experimenting a bit. Also read up on 
Evaluate and Unevaluated.

If you want BoxTree to display the unevaluated expression, it too should 
be given the HoldAll (or possibly HoldFirst) attribute.

David Bailey
http://www.dbaileyconsultancy.co.uk


  • Prev by Date: Re: How to select several cells
  • Next by Date: Re: Simplify exponents in output
  • Previous by thread: Re: HoldForm in defined function doesn't seem to work
  • Next by thread: Export Mathematica->Excel [specific sheet]