Inconsistencies in pattern matching.
- To: mathgroup at smc.vnet.net
- Subject: [mg12937] Inconsistencies in pattern matching.
- From: Sean Ross <seanross at worldnet.att.net>
- Date: Wed, 24 Jun 1998 03:44:55 -0400
- Sender: owner-wri-mathgroup at wolfram.com
This is an example taken from Ken Wagners Power Programming book:
In[1]:={{x1,y1},{x2,y2},{x3,y3}}/.{x_,y_}->{x,Log[y]}
Out[1]:={{x1,Log[y1]},{x2,Log[y2]},{x3,Log[y3]}}
In[2]:={{x1,y1}}/.{x_,y_}->{x,Log[y]}
Out[2]:={{x1,Log[y1]}}
As long as the list of {x,y} data points has one point or greater than
two points, it transforms as one would expect. If there are two {x,y}
data points, it transforms differently.
In[3]:={{x1,y1},{x2,y2}}/.{x_,y_}->{x,Log[y]}
Out[3]:={{x1,y1},{Log[x2],Log[y2]}}
Now, if x_ is seen to match {x1,y1} in example 3, then why doesn't it
also match it in example number 1 and 2? This behavior can be fixed
with a /;Head[x]=!=List pattern restricting rule, but that is not the
point. This seems grossly inconsistent to me. Can anyone explain why
it does this and/or justify that this is a good thing?