Re: Fine control of evaluation

*To*: mathgroup at smc.vnet.net*Subject*: [mg126470] Re: Fine control of evaluation*From*: "djmpark" <djmpark at comcast.net>*Date*: Sat, 12 May 2012 04:57:18 -0400 (EDT)*Delivered-to*: l-mathgroup@mail-archive0.wolfram.com*References*: <13064693.4533.1336710718460.JavaMail.root@m06>

This is easy using either the EvaluateAt or EvaluateAtPattern functions in the Presentations Application. << Presentations` func1[x_] := f[x]; func2[x_] := g[x]; HoldForm[func1[x] + func2[x]] % // EvaluateAt[{1, 1}] func1[x] + func2[x] f[x] + func2[x] HoldForm[func1[x] + func2[x]] % // EvaluateAtPattern[_func1] func1[x] + func2[x] f[x] + func2[x] David Park djmpark at comcast.net http://home.comcast.net/~djmpark/index.html From: Brentt [mailto:brenttnewman at gmail.com] Hello, I am struggling with evaluation control and was hoping someone might point me in the right direction. I vaguely remember seeing something in the manual or the tutorials addressing this issue, but I can't find the section I saw it in. How does one get fine control over things wrapped in Hold and HoldForm. Say I have some functions func1[x_]:= f[x]; func2[x_] := g[x]; step1 = HoldForm[ func1[x]+ func2[x] ]; Now say I want the statements wrapped in HoldForm, func1[x]+ func2[x] to evaluate to f[x]+ func2[x] I thought naturally it would be something like step2 = HoldForm[ Evaluate[func1[x]]+ func2[x] ] ; But then HoldForm seems a bit overzealous about it's task, and outputs Evaluate[func1[x]]+ func2[x]---it leaves Evaluate unevaluated. (I tried wrapping it func1[x] in ReleaseHold to no avail.) The above is just pseudocode, Maybe there is some specifics about what I was actually doing that was causing the unintuitive behavior (i.e. HoldForm holding Evaluate, instead of, well, evaluating.) What I was doing was more along these lines: ---------------- ubounds= {u,0, pi}; vbounds={v,0,2pi}; t[dir_]:= D[s[u,v],dir_]; (*where dir_ is going to be either u or v*) (*here is the difficult part:*) formattedOutput= Integrate[HoldForm[t[u]] , ubounds, vbounds ] //TraditionalForm; ---------------- The issue is that I want the t[u] wrapped in the HoldForm to evaluate to D[s[u,v],dir_], and hold that. If I wrap it in Evaluate, HoldForm holds Evaluate (puzzling), and tries to integrate Evaluate as if it is the integrand. I've tried all kinds of permutations of HoldForm, Defer, ReleaseHold, Evaluate, and I haven't had anything to work. Thank you for any help or pointing me in the right direction