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

```

• Prev by Date: Re: DownValues and Cases
• Next by Date: Re: Re: DownValues and Cases
• Previous by thread: Re: DownValues and Cases
• Next by thread: Re: Re: DownValues and Cases