Re: DownValues and Cases
- To: mathgroup at smc.vnet.net
- Subject: [mg70789] Re: DownValues and Cases
- From: dh <dh at metrohm.ch>
- Date: Fri, 27 Oct 2006 00:28:47 -0400 (EDT)
- References: <ehpm23$kid$1@smc.vnet.net>
Hi Bruce,
I do not know the exact answer, I can only guess.
It looks like nested HoldPattern are stripped, they have the same effect
as a single HoldPattern. This prevents the use of "HoldPattern" as a
pattern. What we can nevertheless do to get {x,y }is a 2 step replacement:
Cases[h, (x_ :> y_) -> {x, y}] /. _[_[x_]] -> x
Daniel
Bruce Colletti wrote:
> Re Mathematica 5.2 under WinXP.
>
> The results of the first two Cases statements leads me to anticipate {{1,3.5}, {2,5}, {_,0}} as the output of the third.
>
> The output of the fourth Cases statement confirms this expectation.
>
> Unfortunately, the output of the third statement is the empty list.
>
> Why so? I've reviewed a related mid-July MathGroup thread, but don't see the answer (if it's there at all).
>
> Thankx.
>
> Bruce
>
> --------------------------
>
> f at 1=3.5;
> f@2=5;
> f[_]:=0;
> h=DownValues@f
>
> Out[4]={HoldPattern[f[1]] :> 3.5, HoldPattern[f[2]] :> 5, HoldPattern[f[_]] :> 0}
>
> Cases[h,HoldPattern[f[x_]] -> x,Infinity]
> Out[5]={1,2,_}
>
> Cases[h,(_ :> y_) -> y,Infinity]
> Out[6]={3.5,5,0}
>
> Cases[h,(HoldPattern[f[x_]] :> y_) -> {x,y},Infinity]
> Out[7]={}
>
> Cases[{a :> 4,b :> 5, c :> 6},(x_ :> y_) -> {x,y}]
> Out[8]={{a,4},{b,5},{c,6}}
>