Re: Slots & Ampersands

• To: mathgroup at smc.vnet.net
• Subject: [mg74399] Re: Slots & Ampersands
• From: Albert <awnl at arcor.net>
• Date: Mon, 19 Mar 2007 22:09:06 -0500 (EST)
• References: <etlq8s\$rab\$1@smc.vnet.net>

```Hi,

>  I've always regarded the Slot and Ampersand as being
>  inseparable in Mathematica (the Laurel & Hardy of
>  Mathematica?),
> and was surprised to find one of them absent in
>
>    Plot[Sin[x], {x, 0, 2Pi}, ColorOutput ->
>       (RGBColor[1, 0, 0]&)]
>
>  [Help Browser under ColorOutput::colpc ,Examples]
>
>   Question 1
>
>   Where is Laurel gone? Is he inside ColorOutput or
>   RGBColor?

Laurel is not there, he is just not that useful...
You should first learn that #& is just a shortcut for Function[Slot[1]],
which makes clear tha # is a slot for an argument of the function, that
is the first argument to be precise, which you could also write as #1.
#2 would be the second argument and so on, ## is a (Slot)Sequence of all
arguments. Since you can define Functions which don't need arguments or
at least don't make use of them, the single & just means this: A
function which doesn't make use of any of the arguments you give it. So
it can go without the # very well. On the other hand you can define
expressions with just # (Slot[n] that is) and no & or Function in it,
e.g. when building a function body automatically. Mathematica will just
not do anything with the slots in that case, I think.

Example:

f=Print["I am happy to ignore my arguments"]&

(* check that it is indeed a Function and # is a Slot[]: *)
FullForm[f]
FullForm[#]

(* call it with or without arguments: *)
f[]
f[x]
f[1,3,4,{None,101}]

(* define a function body and only later construct a Function from it:*)
a = #1 + 4
ff = Evaluate[a] &
ff[3]

>   Question 2
>
>   Are there other similar constructs in Mathematica? [No # ]

As far as I know, the only construct where the character # (Slot[])