MathGroup Archive 2006

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

Search the Archive

Re: A question about pattern-matching

  • To: mathgroup at smc.vnet.net
  • Subject: [mg63743] Re: [mg63728] A question about pattern-matching
  • From: Sseziwa Mukasa <mukasa at jeol.com>
  • Date: Fri, 13 Jan 2006 04:48:20 -0500 (EST)
  • References: <djcgcs$6du$1@smc.vnet.net> <200510230946.FAA10826@smc.vnet.net> <200601120822.DAA10486@smc.vnet.net>
  • Sender: owner-wri-mathgroup at wolfram.com

On Jan 12, 2006, at 3:22 AM, gardyloo wrote:

> Hi,  all.
>
>    I am trying to extract certain parts of a dataset, while retaining
> some of the overall structure. I decided to do it using pattern- 
> matching
> and replacements, but have run into some problems.
>
> First, a small subset of the data:
>
> testList = {{-90, {{60493, 0.061}, {62493, 0.15881}, {64493.5,
>
>             0.559}}}, {-88, {{62493, 0.151}, {64493., 0.61617},  
> {65993.4,
>
>             0.171}, {68993.10, 0.06}}}, {-86, {{62493.75, 0.14},  
> {64493.55,
>
>             0.61440}, {65993., 0.18}, {67993, 0.0}, {68993.100,  
> 0.06448}}}};
>
>
> The data consists of lists of the form  { integer, {  ordered pair1,
> ordered pair2, ... } }, and my goal is to extract the second number in
> each of the ordered pairs, while retaining the lists' overall  
> structure.
> So, for example, from testList, I'd want something like
>       { { 0.061, 0.15881, 0.559}, {0.151, 0.61617, 0.171, 0.06},  
> {0.14,
> 0.61440, 0.18,  0.0, 0.06448}}
> returned.
>
> I've tried several patterns, with variously named bits, and only  
> some of
> them make sense to me (and none of them, yet, return what I really
> want). Can someone explain them to me?
>
> I'd expect this one to return the list of lists of ordered pairs. It
> returns the full testList:
>
> testList /. {{(z_)?NumberQ, x:{{_Real, _Real}...}} -> x}

That's because a lot of your pairs are not of the form {_Real,_Real}  
such as  {60493, 0.061} which is an {_Integer,_Real}.

> On the other hand, this one returns only the lists of ordered pairs:
>
> testList /. {{(z_)?NumberQ, x:{{_, _}...}} -> x}

As expected since the ordered pairs are of the form {_,_} which matches.

> I thought that one was free to "type" the parts of the pattern to
> return.

You are, but you have to be sure of what the type you want to match  
is, for example:

N[testlist]/.{{(z_)?NumberQ, x:{{_Real, _Real}...}} -> x}

results in the lists of pairs.

> I also thought that naming the parts rather freely was allowed.
> ...the
> last one, in naming the first of the ordered pairs' elements, returns
> the testList apparently unchanged:
>
> In[54]:=
>
> [deleted]

> testList /. {{z_, {x:{a_, _}...}} -> x}
>
>     Although a solution would help me a lot, I really would like to  
> know
> what I'm missing in applying these replacement rules.

The last rule is a rather confusing construct.  by using a_ to name  
the pattern matching the first element of the list and ... means you  
expect the first element of the list of pairs to be the same for all  
pairs.  You can see this clearly using MatchQ:

In[16]:=
MatchQ[{{1,2},{1,3},{1,4}},{{a_,_}...}]
MatchQ[{{1,2},{1,3},{2,4}},{{a_,_}...}]
Out[16]=
True
Out[17]=
False

Hope this helps.

Regards,

Ssezi




  • Prev by Date: Re: Confusing behaviour with caching of evaluated expressions ?
  • Next by Date: data extraction question
  • Previous by thread: Re: A question about pattern-matching
  • Next by thread: Re: A question about pattern-matching