Re: Why () around Function in pattern?
- To: mathgroup at smc.vnet.net
- Subject: [mg16439] Re: Why () around Function in pattern?
- From: "Allan Hayes" <hay at haystack.demon.co.uk>
- Date: Sat, 13 Mar 1999 02:21:48 -0500
- References: <7c59uk$7of@smc.vnet.net>
- Sender: owner-wri-mathgroup at wolfram.com
Kevin Jaffe wrote in message <7c59uk$7of at smc.vnet.net>... >Why does this "work" > >In[172]:= q[{x_Integer, y_Integer} ? > (Function[v, v.v > 4])] := qp[x + y] >In[173]:= q[{3, 4}] >Out[173]= qp[7] > >while this doesn't?: > >In[174]:= qq[{x_Integer, y_Integer} ? > Function[v, v.v > 4]] := qp[x + y] >In[175]:= qq[{3, 4}] >Out[175]= qq[{3, 4}] > >I.e., why are ()'s necessary around the pure function >in the arguments pattern? Kevin: The FullForms are HoldForm[FullForm[ q[{x_Integer, y_Integer} ? (Function[v, v.v > 4])]]] qq[PatternTest[List[Pattern[x,Blank[Integer]],Pattern[y,Blank[Integer]]], Function[v,Greater[Dot[v,v],4]]]] and HoldForm[FullForm[ q[{x_Integer, y_Integer} ? Function[v, v.v > 4]]]] qq[PatternTest[List[Pattern[x,Blank[Integer]],Pattern[y,Blank[Integer]]], Function][v,Greater[Dot[v,v],4]]] Without the parentheses PatternTest grabs just Function, not all of Function[...] We get qqq[{x_Integer, y_Integer} ? (True&)[v, v.v > 4]] := qp[x + y] qqq[{3,4}[v, v.v > 4]] qp[7] The precedence of operators is listed in the Mathematica Book A 2.7 --------------------- Allan Hayes Mathematica Training and Consulting Leicester UK www.haystack.demon.co.uk hay at haystack.demon.co.uk Voice: +44 (0)116 271 4198 Fax: +44 (0)870 164 0565