RE: Should Pure Functions Require &

• To: mathgroup at smc.vnet.net
• Subject: [mg29775] RE: Should Pure Functions Require &
• From: "Ersek, Ted R" <ErsekTR at navair.navy.mil>
• Date: Sun, 8 Jul 2001 01:00:20 -0400 (EDT)
• Sender: owner-wri-mathgroup at wolfram.com

```	Earlier I wrote:
--------------------
> I stated wondering if all would work well if pure functions didn't require
> & at the end. I am thinking it would be great if a future version of
> Mathematica would make the use of & optional.
>
> So for example we could use
>   Select[data, #!=0]
>   Select[data, #!=0&]
>
>
> and we could use
>    #^2 /@expr
>    #^2& /@expr
>
> I would want to have pure functions ending with & optional rather than
> prohibited for backward compatibility.  Wouldn't life be better if we
> didn't have to use &. Is there a reason why my suggestion would not work?
>
-----------------
Orestis Vantzos,
should do what  Select[data, #!=0&]  does now,
or what  Select[data, #!0]&  does now.

In that case one clearly wants  Select[data, #!=0&]
since the other case is a pure function that always returns an empty
list.

----------------
The way I would like to see it the kernel would put an & at a
suitable place in the following situations.
1  A head has one or more #, #n, ##, or ##n but no &.
2  Use of   expr/;test,  _?test,  __?test, ___?test  where test has
" ".
3  The right side of Set, or SetDelayed has " ".
4  The second argument of Select, MatrixQ, VectorQ has " ".
5  An argument of a functional programming construct includes #, #n,
##, or ##n but no & and a function is expected in this argument.

Examples of 5

In[1]:=  g = {##+1, ##+2};
Through[ g[{x,y,z}] ]

This would return the same thing as if we had  g = {##+1&, ##+2& }
since Through expects an argument of the form  p[func1, func2][x]

In[2]:=  g= {##+1, ##+2};
Apply[ g, {x,y,z} ]

This would return the same thing as if we had  g= {##+1, ##+2}&
since Apply expects the first argument to be a function.

In[3]:=  Clear[g]; Apply[g, {x,y,z}]

Out[3]=  g[x,y,z]

In this case (g) has no #, #n, ##, ##n so an (&) would not be
assumed.

I haven't found a case where the "missing" (&) could go "here" or
"there" and both decisions would be useful. Also I am not aware of a use for
#, #n, ##, ##n without an (&).

------------------
> Regards,
>   Ted Ersek