Re: Function[x...] and #& not equivalent
- To: mathgroup at smc.vnet.net
- Subject: [mg74441] Re: Function[x...] and #& not equivalent
- From: dh <dh at metrohm.ch>
- Date: Wed, 21 Mar 2007 02:53:56 -0500 (EST)
- References: <etof3e$i3d$1@smc.vnet.net>
Hi, you are fooling yourself. The structure of: Function[MkLength, MkLength[Eternity][ Function[length, Function[list, If[EmptyQ[list], 0, 1 + length[Rest[list]]]]]]][{}] is: Function[MkLength,..][{}], the argument is {}. Therefore, you get {}[Eternity][...]. No further evaluation is possible. However, in: #[Eternity]&[Function[length,Function[list,If[EmptyQ[list],0,1 + length[Rest[list]]]]]] [{}] the argument is: Function[length,Function[list,If[EmptyQ[list],0,1 + length[Rest[list]]]]]. This evaluates to a new function that then takes the second argument {} and evaluates to 0. Note that as long as your are not a real Mathematica crack, it is a good idea to make things simple. Daniel wooks wrote: > In[19]:= > Clear[Eternity,x]; > Eternity[x_]:=Eternity[x]; > > In[21]:= > Clear[EmptyQ]; > EmptyQ[{}]:=True; > EmptyQ[x_List]:=False; > EmptyQ[x_]:=Print["Argument to EmptyQ must be a list."]; > > This below works for the empty list it gives 0. > In[25]:= > Clear[length,list] > Function[length, > Function[list,If[EmptyQ[list], > 0, > 1 + > length[Rest[list]]]]][ > Eternity][{}] > Out[26]= > 0 > > What I am trying to do here is pass the function above as the > definition of the parameter MkLength and then run the exactly the same > thing by MkLength[Eternity]. > It doesn't work. > In[27]:= > Function[MkLength,MkLength[Eternity][Function[length, > Function[list,If[EmptyQ[list],0,1 + > length[Rest[list]]]]]]][{}] > > Out[27]= > {}[Eternity][ > Function[length,Function[list,If[EmptyQ[list], > 0,1+length[Rest[list]]]]]] > > But look what happens when I use the function abbreviation instead of > Function[MkLength........ > In[29]:= > #[Eternity]&[Function[length, > Function[list,If[EmptyQ[list],0,1 + length[Rest[list]]]]]] > [{}] > Out[29]= > 0 > >