Re: perplexed by blank sequence in pattern replacement
- To: mathgroup at smc.vnet.net
- Subject: [mg68727] Re: perplexed by blank sequence in pattern replacement
- From: "Eckhard Hennig" <aidev at n-o-s-p-a-m.kaninkolo.de>
- Date: Thu, 17 Aug 2006 04:18:34 -0400 (EDT)
- References: <ebuj5d$6f5$1@smc.vnet.net>
- Sender: owner-wri-mathgroup at wolfram.com
"Blake" <laing at ou.edu> schrieb im Newsbeitrag news:ebuj5d$6f5$1 at smc.vnet.net... > Dear MathGroup: > > I have been blithely using blank sequences in pattern matching for some > time. In persuit of a bug in a package of mine, I was quite alarmed to > find that I don't really understand how to use the blank sequence, as > expressed in the following simplified example: > > In[1]:=Replace[a*b*c,Times[mysequence__]:>{mysequence}] > > Out[1]={a b c} > > I expected Out[1]={a,b,c}, from a naieve reading of the full form of > a*b*c > > In[2]:=FullForm[a*b*c] > > Out[2]//FullForm=Times[a,b,c] > > Will someone PLEASE tell me why In[1] does not yield the results I > expected? (I can readily use a work-around, what I am concerned with is > a correct understanding of pattern matching). Hi Blake, Mathematica evaluates the left-hand sides of transformation rules before they are applied. Therefore, the pattern Times[mysequence__] reduces to mysequence__ before it is matched against a*b*c. To get the result you want, you must prevent Mathematica from evaluating the pattern. This can be done using the HoldPattern function as follows: In[1]:= Replace[a*b*c, HoldPattern[Times[mysequence__]] :> {mysequence}] Out[1] = {a, b, c} Best regards, Eckhard -- Dr.-Ing. Eckhard Hennig www.kaninkolo.de/ai aidev \at kaninkolo \dot de