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