Re: a strange line of code

*To*: mathgroup at smc.vnet.net*Subject*: [mg52723] Re: a strange line of code*From*: D Herring <dherring at at.uiuc.dot.edu>*Date*: Sat, 11 Dec 2004 05:21:16 -0500 (EST)*References*: <cpb00k$j28$1@smc.vnet.net>*Sender*: owner-wri-mathgroup at wolfram.com

> in a notebook, I found and function to calculate the Feigenbaum > bifurcation Diagram. > I principial understand the Feigenbaum, and I think I'm also able to > write such an funcion by myself, but not in this compact way. > > Can someone please explain me the meaning of the Symbols #, @ and & > > Here is the Code: > > Feigenbaum = Compile[{{ > ?, _Real}}, ({?, #} &) /@ Union[Drop[NestList[ > ? # (1 - #) &, 0.2, 300], 100]]]; In a nutshell, # - argument for an unnamed function & - completes the definition of an unnamed function; it takes the previous token (raw term or bracketed expression) and treats it as a function which takes an input. /@ - Map command, infix notation For a brief intro to the function notation, see section 2.2.4 in the Mathematical Book, or look up & in the Master Index. Basically, "f[x_]:=x^2" can be written in a ``pure'' form as "(#^2)&". "y=f[3]" is then equivalent to "y=(#^2)& /@ 3". "y=Map[f,x]" is equivalent to "y=f /@ x". If x was a list, the result will be of the form y={f[x[[1]]], f[x[[2]]], ...}. Your example was carefully crafted line of code; it highlights the expressive power of functional programming, but also shows the potential for obfuscation. Later, Daniel