Services & Resources / Wolfram Forums
MathGroup Archive
*Archive Index
*Ask about this page
*Print this page
*Give us feedback
*Sign up for the Wolfram Insider

MathGroup Archive 1999

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

Search the Archive

Re: Pure Functions in rules

  • To: mathgroup at
  • Subject: [mg15965] Re: Pure Functions in rules
  • From: "Allan Hayes" <hay at>
  • Date: Fri, 19 Feb 1999 03:26:53 -0500
  • References: <7ag34l$>
  • Sender: owner-wri-mathgroup at

Will Self wrote in message <7ag34l$aie at>...
>It appears that I cannot depend on using a pure function
>in a pattern-matching rule.
>Here I am trying to convince reluctant students that they're
>better off learning to use Mathematica than doing things
>by hand, and we run across something like this, and in a
>much more complicated situation where the trouble was
>hard to isolate.
>I am quite frankly incensed by the behavior shown in
>In/Out 80, below.  Look at these examples:
>In[73]:=     {1,2,3}/.(m_List->7)
>Out[73]=    7
>In[74]:=     {1,2,3}/.(m_List->(2*m))
>Out[74]=    {2,4,6}
>In[75]:=     2*#& /@ {1,2,3}
>Out[75]=    {2,4,6}
>In[77]:=     f[m_List]:=2*#& /@ m
>In[78]:=     f[{1,2,3}]
>Out[78]=    {2,4,6}
>In[79]:=     {1,2,3}/.m_List->f[m]
>Out[79]=    {2,4,6}
>Now try this:
>In[80]:=     {1,2,3}/.(m_List->(2*#& /@ m))
>Out[80]=    {1,2,3}
>Does anyone (say, at WRI for example) care to comment on
>Will Self

In[80 evaluates thus:

{1,2,3}/.(m_List->(2*#& /@ m))  (*right side of -> evauates before



Using :> instead of -> gives

{1,2,3}/.(m_List-:>(2*#& /@ m))

2*#& /@ {1,2,3}


You don't get the same sort of problem with

>In[79]:=     {1,2,3}/.m_List->f[m]

because f only evauates on lists.


Allan Hayes
Mathematica Training and Consulting
Leicester UK
hay at
Voice: +44 (0)116 271 4198
Fax: +44 (0)870 164 0565

  • Prev by Date: Re: MyPrependTo
  • Next by Date: Re: Figure legend & Overlapping text pb (LINKs)
  • Previous by thread: RE: Pure Functions in rules
  • Next by thread: Re: Pure Functions in rules