MathGroup Archive 2007

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

Search the Archive

Letting functions not evaluate

  • To: mathgroup at smc.vnet.net
  • Subject: [mg79416] Letting functions not evaluate
  • From: Josh Burkart <jburkart at ucdavis.edu>
  • Date: Thu, 26 Jul 2007 05:33:19 -0400 (EDT)

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].


  • Prev by Date: Re: Re: Searching list for closest match to p
  • Next by Date: How to return a mixture of vectors and matrices from compiled functions
  • Previous by thread: loading Units package from a Button in 6.0
  • Next by thread: Re: Letting functions not evaluate