Re: Re: Can anybody help?
- To: mathgroup at smc.vnet.net
- Subject: [mg63641] Re: [mg63603] Re: Can anybody help?
- From: ggroup at sarj.ca
- Date: Sun, 8 Jan 2006 03:33:07 -0500 (EST)
- References: <dpg0pr$pkt$1@smc.vnet.net> <200601070729.CAA06903@smc.vnet.net>
- Reply-to: ggroup at sarj.ca
- Sender: owner-wri-mathgroup at wolfram.com
On Saturday, January 7, 2006 at 02:29 GMT -0500, Plizak wrote: > It boggles my mind that some people call that code elegant. > Short, yes, elegant, no. It is far from intuitive to know what > Position[v1, #1]&/@v3 does. That's a matter of opinion. > Anyone care to enlighten me? Break it down, you are using 3 built-in functions: 1. First you create a pure function: Position[v1,#1]& In[1]:=?Function Out[1]:= Function[body] or body& is a pure function. The formal \ parameters are # (or #1), #2, etc. Function[x, body] is \ a pure function with a single formal parameter x. <snip> 2. This function is a simple use of the built-in function: In[1]:= ?Position Out[1]:= Position[expr, pattern] gives a list of the positions at \ which objects matching pattern appear in expr. <snip> 3. The pure function is mapped onto the list of elements of interest. In[2]:=?/@ Out[2]:= Map[f, expr] or f /@ expr applies f to each element on the \ first level in expr. <snip> So Position[v1, #1]&/@v3 finds the locations of the elements in v1 that match an element in v3. I would argue this is very elegant if you're conversant with Mathematica and functional programming; you've avoided any explicit looping. Note that if you were to try to achieve the same thing in a purely procedural manner, you would likely have multiple levels of nested looping. If you prefer, rewrite this example in a couple of steps: f=Function[x, Position[v1,x]] Map[f,v3]
- References:
- Re: Can anybody help?
- From: "plizak" <plizak@gmail.com>
- Re: Can anybody help?