Re: How to use HoldForm within Module
- To: mathgroup at smc.vnet.net
- Subject: [mg15276] Re: How to use HoldForm within Module
- From: "Allan Hayes" <hay at haystack.demon.co.uk>
- Date: Thu, 31 Dec 1998 04:39:31 -0500
- References: <76cijv$o48@smc.vnet.net>
- Sender: owner-wri-mathgroup at wolfram.com
Chee Lim Cheung wrote in message <76cijv$o48 at smc.vnet.net>...
>Hello Mathematica gurus,
>
>I am new to Mathematica. I need to use a function in its original form
>within Module.
>
>e.g.,doNOTCHANGE[f_]:=Module[{g},g=HoldForm[f];Print[g]]
>
>may not give what I want as f is already rearranged according to
>Mathematica's lexicographical order within Module,i.e.,HoldForm[f] in
>Module may not be exactly of the same form as f as defined. One example
>is f=-1(UnitStep[t-1]-UnitStep[t-2]).Can any of you out there show me
>the way to get f in its original form inside Module?
>
>Thanks
>Chee
>
Chee,
In your code, the function f is evaluated before being passed to the
right side.
This can be prevented by giving doNOTCHANGE the attribute HoldAll:
Attributes[doNOTCHANGE] = HoldAll;
In[1]:=
doNOTCHANGE[f_] := Module[{g}, g = HoldForm[f]; Print[g]]
In[2]:=
doNOTCHANGE[1(UnitStep[t - 1] - UnitStep[t - 2])]
1 (UnitStep[t - 1] - UnitStep[t - 2])
If you don't need the Module then
Attributes[doNOTCHANGE2] = HoldAll;
In[3]:=
doNOTCHANGE2[f_] := Print[HoldForm[f]]
In[4]:=
doNOTCHANGE2[1(UnitStep[t - 1] - UnitStep[t - 2])]
1 (UnitStep[t - 1] - UnitStep[t - 2])
Allan
---------------------
Allan Hayes
Mathematica Training and Consulting
www.haystack.demon.co.uk
hay at haystack.demon.co.uk
Voice: +44 (0)116 271 4198
Fax: +44 (0)870 164 0565