MathGroup Archive 1998

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

Search the Archive

Re: [correction] Pattern matching more than once



Robert,

could you re-mail your [correction] please? I received it with a lot of
spurious " ÿ "-characters in it.

I would like to check if my version comes to the same result as yours:


 myruleú___,list1:{pre1___,x_,post1___},
       list2:{pre2___,x_,post2___},b___} ->
     {zdummy[{a,{pre1,ydummy[x],post1},list2,b}] ,
      zdummy[{{pre1,ydummy[x],post2},{pre2,x,post1}}]}; 
 postop[it_]:ÿ
  Flatten[kÿit/. zdummy:>Sequence /.ydummy:>Identity) ,
    Depth[k]-3+0*Clear[k]]

In[58]:lÿa,b,c,d,e,u,v},{f,b,g,d,h,u,x}}; 
In[59]:l //. myrule //postop
Out[59]{{a,b,c,d,e,u,v},{f,b,g,d,h,u,x},{a,b,c,d,e,u,x},{f,b,g,d,h,u,v},{a,b,c,d ,h,u,
   
x},{f,b,g,d,e,u,v},{a,b,c,d,h,u,v},{f,b,g,d,e,u,x},{a,b,g,d,h,u,x},{f ,b,c,
   
d,e,u,v},{a,b,g,d,h,u,v},{f,b,c,d,e,u,x},{a,b,g,d,e,u,v},{f,b,c,d,h,u ,x},{
    a,b,g,d,e,u,x},{f,b,c,d,h,u,v}}



wouter.
*************************************************************************
*****
At 03:09 1-05-98 -0400, Robert Villegas wrote:
>Thanks to Jrgen Tischer for prompting me to think about some more
>examples, and discovering that my code had a bug in it.  In the
>auxiliary function Interleave, I applied Drop and Join in the wrong
>order.
>
>Here is a correction, along with a couple examples that came out of my
>correspondence with Jrgen, which work fine with the new code. I also
>added an order-preserving Union called EliminateRepetition, since
>sometimes duplicates end up in the result.
>
>
>Interleave[subLists_, commonElements_] /;
>  (Length[commonElements] ÿLength[subLists] - 1) :  Join @@ Drop[#, -1]& @
>    MapThread[Sequence,
>      {subLists, List /@ Append[commonElements, Null]}]
>
>EliminateRepetition[list_List] :ÿast /@
>  Sort[ {Position[list, Verbatim[#], {1}, 1][[1, 1]], #}& /@ Union[list]
>ÿ
>
>SpliceChains[chain1_, chain2_] :  Module[{commonElements, commonPos1,
commonPos2, subChains1,
>subChains2}ÿ
>    commonElements ÿntersection[chain1, chain2];
>    commonPos1       Flatten @
>        Position[chain1, Alternatives @@ commonElements, {1},
>          Heads -> False];
>    commonPos2       Flatten @
>        Position[chain2, Alternatives @@ commonElements, {1},
>          Heads -> False];
>    subChains1 úpply[
>        Take[chain1, {#1 + 1, #2 - 1}] &,
>        Partition[Join[{0}, commonPos1, {0}], 2, 1],
>        {1}
>        ];
>    subChains2 úpply[
>        Take[chain2, {#1 + 1, #2 - 1}] &,
>        Partition[Join[{0}, commonPos2, {0}], 2, 1],
>        {1}
>        ];
>    EliminateRepetition @
>      Distribute[Transpose[{subChains1, subChains2}], List, List,
>        List,
>        Interleave[{##}, commonElements] &
>      ]
>  ]
>
>
>(* Examples that broke my original code, but work fine in the new code:
>*ÿ
>
>In[10]:ÿpliceChains[{a, x}, {b, x, c}]
>
>Out[10]ÿ{a, x}, {a, x, c}, {b, x}, {b, x, c}}
>
>In[11]:ÿpliceChains[{{a}, {a, b, c}, {a, b, c, d, e}},
>  {{a, b}, {a, b, c}, {a, b, c, d}}]
>
>Out[11]ÿ{{a}, {a, b, c}, {a, b, c, d, e}}, {{a}, {a, b, c}, {a, b,
>c, d}},
>  {{a, b}, {a, b, c}, {a, b, c, d, e}}, {{a, b}, {a, b, c}, {a, b, c,
>d}}ÿ
>
>
>I'm sorry for the error in the previous version.
>
>
>Robby Villegas
>
>P.S.  By the way, as an advanced note, if the elements of your sets can
>bþ
>Mathematica patterns such as x_, which is unlikely, then my code won't
>work.  This could be fixed quite easily.  Also, if you're doing
>anything really tricky with unevaluated expressions, then it won't
>work. This could be fixed, but less easily.  Unless you're doing
>something for an esoteric programming purpose, these limitations won't
>bother you.
>
>
Dr. Wouter L. J. MEEUSSEN
w.meeussen.vdmcc@vandemoortele.be
eu000949@pophost.eunet.be




  • Prev by Date: Re: Does Win98 scandisk work with 3.0?
  • Next by Date: Re: Re: Re: Boundary cond. at Infinity
  • Prev by thread: [correction] Pattern matching more than once
  • Next by thread: Re: Output of Animate to AVI