Re: Letting functions not evaluate
- To: mathgroup at smc.vnet.net
- Subject: [mg79486] Re: [mg79416] Letting functions not evaluate
- From: DrMajorBob <drmajorbob at bigfoot.com>
- Date: Fri, 27 Jul 2007 06:05:46 -0400 (EDT)
- References: <16001744.1185445456705.JavaMail.root@m35>
- Reply-to: drmajorbob at bigfoot.com
Pattern matching absolutely will do this: Clear[g] g[x_, y_] /; IntegerQ[x y] := Mod[10, x*y] g[2, 1/2] 0 g[2, 1/3] g[2, 1/3] Bobby On Thu, 26 Jul 2007 04:33:19 -0500, Josh Burkart <jburkart at ucdavis.edu> wrote: > Say I have a function f[x], and, for certain values of the argument x, I > don't want it to evaluate to anything. E.g., say > > f[x_]:=Mod[10,x], > > and if x is not an integer, then I want f[x] to yield simply f[x]. One > way to achieve this is through pattern matching, i.e., > > f[x_Integer]:=Mod[10,x] > > Although this works perfectly in this example, it is somewhat limited. > For instance, if I have a function taking two arguments and I want to > perform some check on both arguments together to see whether the > function should evaluate or not, pattern matching won't work. E.g., > > g[x_,y_]:=Mod[10,x*y] > > only if x*y is an integer (even if x and y individually aren't > integers). I think there's some way to do this more generally than > pattern matching, since for instance if I enter > > In[11]: Integrate[Gamma[x]^5,x]//FullForm > Out[11]//FullForm= Integrate[Power[Gamma[x],5],x] > > Mathematica just returns the input unevaluated after taking a little > time to decide it's not resolvable. Anyone know how to do this? Using an > If[] statement doesn't work, since > > In[1]:= f[x_]:=If[IntegerQ[x], Mod[10, x], f[x]] > In[4]:= f[3] > Out[4]= 1 > In[3]:= f[3.3] > During evaluation of In[3]:= $IterationLimit::itlim: Iteration limit of > 4096 exceeded. >> > Out[3]= Hold[f[3.3]] > > results in infinite recursion. HoldForm[] and Defer[] also produce > somewhat dissatisfactory results, since the FullForm[] of what they > return is actually HoldForm/Defer[blah blah]. > > -- DrMajorBob at bigfoot.com