Re: Pattern Matching
- To: mathgroup at smc.vnet.net
- Subject: [mg58250] Re: Pattern Matching
- From: "dkr" <dkrjeg at adelphia.net>
- Date: Fri, 24 Jun 2005 02:50:21 -0400 (EDT)
- References: <d9e0bc$g6i$1@smc.vnet.net>
- Sender: owner-wri-mathgroup at wolfram.com
As I understand it, you want to start with a list, taking the first
element of the list as the starting point. Then you want to extract the
first element remaining in the list that is = to this starting point
by at least 2. Then treating this extracted element as a new starting
point, you want to extract the first element remaining in the list that
is = this new starting point by at least 2. Then take this last
element extracted, treat it as a new starting point and so on. If this
is what you want, the following should work:
In[13]:=
{0,-1,0,-1,-2,-3,-4,-3,-4,-5}//.{e___List,a_Integer,b___,c_,d___}/;(c<=(a-2)):>
{e,{c},c,d}/.{x___List,__Integer}:>Flatten[{x}]
Out[13]={-2,-4}
(Note that by default Mathematica's pattern matcher will attempt to find the
shortest sequence to match b, and hence no elements of b will satisfy
b<=(a-2). The sequence of lists at the beginning of the pattern are
used to store the extracted elements, with the initial match for e
being null. )