Mathematica 9 is now available
Services & Resources / Wolfram Forums / MathGroup Archive
-----

MathGroup Archive 2012

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

Search the Archive

Re: Why HoldForm[] shows this expression in red in notebook?

  • To: mathgroup at smc.vnet.net
  • Subject: [mg125127] Re: Why HoldForm[] shows this expression in red in notebook?
  • From: David Bailey <dave at removedbailey.co.uk>
  • Date: Thu, 23 Feb 2012 05:45:41 -0500 (EST)
  • Delivered-to: l-mathgroup@mail-archive0.wolfram.com
  • References: <jhqml4$f9t$1@smc.vnet.net> <jhsu1o$nmq$1@smc.vnet.net> <jhvu1f$7ua$1@smc.vnet.net>

On 21/02/2012 11:09, Nasser M. Abbasi wrote:
> On 2/20/2012 1:51 AM, David Bailey wrote:
>> On 19/02/2012 11:32, Nasser M. Abbasi wrote:
>>> foo[x_, v_] := Module[{z = v},
>>>       {x^z, Hold[x^z], HoldForm[x^z]}
>>>       ];
>>>
>>> Any one knows why the notebook shows the 'z' in the last term above in
>>> the red and but not the other z's?
>>>
>>> I am using V 8.04 on windows
>>>
>>> thanks
>>> --Nasser
>>>
>>>
>
>> I think the last z is coloured red because you are returning an
>> expression involving a local variable:
>>
>
> But we return expressions involving local variables all the time?
>
> foo[] := Module[{x},
>     x + 3
>     ]

I think the syntax colourer just fails to recognise what is going on 
here. It is not fool proof.
>
> no red color any where.
>

>
> No, that would not work for me, may be I should explain
> more: I have an internal function, where I want to
> make a plot, and want to make a plot label for the plot.
>
> The plot label will be an analytical expression of
> the equation solved.
>
> I am not supposed to use Strings to formulate the
> equations for labels. So what other options are there?
>
> The way I do things now is to make labels using this
> method:
>
> Text@Row[{"equation ",Style[TraditionalForm[HoldForm[...]]]}]
>
> And in place of ... I write the equation, using standard
> Mathemtica code, as I would write it in the main cell itself
> as code. i.e. no strings.
>
> For example, to render this equation: u''[x]=f(x), I would
> write
>
> Text@Row[{"equation ",
>      Style[TraditionalForm[HoldForm[u''[x] == f[x, y]]]]}]
>
> I do not want to Evaluate u''[x] ofcourse. I want just
> to display the equation itself as is.
>
> The problem comes when I do the above inside a function, which
> already has x and y as local symbols being used, like this:
>
> foo[] := Module[{x, y},
>     x = 1; y = 2;
>     {Text@Row[{"equation is ",
>       Style[TraditionalForm[HoldForm[u''[x] == f[x, y]]]]}]
>      }
> ]
>
> Now the red comes back and the $$ show up in the label which
> ofcourse I do not want.
>
> So, I have to change the code in the function, which already
> uses these symbols to use someother symbols. not good.

I'd say the simplest answer is to use global variables inside a Block 
construct instead of a Module construct.

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





  • Prev by Date: Re: NDSolve solutions
  • Next by Date: Dynamically finding distances and angles between user-specified points
  • Previous by thread: Re: Why HoldForm[] shows this expression in red in notebook?
  • Next by thread: How to specify the gradient of this function?