Re: DownValues and Cases

*To*: mathgroup at smc.vnet.net*Subject*: [mg70788] Re: [mg70759] DownValues and Cases*From*: Andrzej Kozlowski <akoz at mimuw.edu.pl>*Date*: Fri, 27 Oct 2006 00:28:44 -0400 (EDT)*References*: <200610260639.CAA19605@smc.vnet.net>

On 26 Oct 2006, at 15:39, 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}} > This is rather tricky. The problem is how to force the PatternMatcher to interpret HoldPattenr literally rather than as the pattern to be held. Note that: Cases[h, (Verbatim[HoldPattern[f[2]]] :> y_) -> {x, y}, Infinity] {{x, 5}} works, but: Cases[h, (Verbatim[HoldPattern[f[x_]]] :> y_) -> {x, y}, Infinity] {} doesn't, because now x_ is also interpreted literally rather than as a pattern. So you have got to somehow to avoid using HoldPattern directly in your pattern (this is now rally getting confusing), for example like this: Cases[h, (p_ :> y_) /; Head[p] === HoldPattern :> {p[[1,1]], y}, Infinity] {{1, 3.5}, {2, 5}, {_, 0}} There are probably more elegant ways but none comes to my mind just now. Andrzej Kozlowski

**Follow-Ups**:**Re: Re: DownValues and Cases***From:*Carl Woll <carlw@wolfram.com>

**References**:**DownValues and Cases***From:*Bruce Colletti <vze269bv@verizon.net>