MathGroup Archive 2006

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

Search the Archive

Re: Extracting a Function's Domain and Image

  • To: mathgroup at smc.vnet.net
  • Subject: [mg68003] Re: [mg67970] Extracting a Function's Domain and Image
  • From: "Carl K. Woll" <carlw at wolfram.com>
  • Date: Thu, 20 Jul 2006 06:04:45 -0400 (EDT)
  • References: <200607190921.FAA21378@smc.vnet.net>
  • Sender: owner-wri-mathgroup at wolfram.com

Bruce Colletti wrote:
> Re Mathematica 5.2.2.
> 
> Why does the last line of code return {x} and not {a,b,_}, while if the f[_]=0 is struck, the answer is {a,b}?  
> 
> I want to extract the domain and image of a user-defined function, and tech support recommended using DownValues (pretty handy).  If you have an easier approach, please share it.  Thanks.
> 
> Bruce
> 
> Remove@f;
> f[_]=0;
> f["a"]=1;
> f["b"]=2;
> Clear@x;
> h=DownValues@f
> Cases[h,f[x_]->x,Infinity]
> 
> Out[52]=
> {HoldPattern[f[a]]:>1,HoldPattern[f[
>    b]]:>2,HoldPattern[f[_]]:>0}
> 
> Out[53]=
> {x} 

The problem with Cases[h,f[x_]->x,Infinity] is that f[x] is being 
evaluated before the rule is used. So, you are actually evaluating

Cases[h, 0->x, Infinity]

You need to prevent the f from evaluating. The reason things worked as 
expected when f[_]=0 was not included is because f[x_] didn't turn into 
0 in that case, so preventing evaluation of f was not necessary.

There are many possible ways of preventing f from evaluating. Here are two:

Cases[h, HoldPattern[f][x_]->x, Infinity]

Block[{f}, Cases[h, f[x_]->x, Infinity]

Carl Woll
Wolfram Research


  • Prev by Date: Re: Norm
  • Next by Date: Re: Norm
  • Previous by thread: Re: Extracting a Function's Domain and Image
  • Next by thread: Re: Extracting a Function's Domain and Image