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]
> instead of
> Select[data, #!=0&]
>
>
> and we could use
> #^2 /@expr
> instead of
> #^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,
asked whether Select[data, #!=0]
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
> Download Mathematica tips, tricks from
> http://www.verbeia.com/mathematica/tips/Tricks.html
>