 
 
 
 
 
 
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
> 

