# Pure function inside another pure function

I have the following working expression:

In[15]:= Length[Select[IntegerPartitions[10],First[#1]==5&]]
Out[15]= 7


But, instead of using the constant 5 I want to map all values from 1 to 10 into this function. If I nest the pure function inside another it doesn't work:

In[18]:= Map[Length[Select[IntegerPartitions[10],First[#]==#&]]&,Range[10]]
Out[18]= {0,0,0,0,0,0,0,0,0,0}


What is the way to do this?

-
You may need to use the variant form Map[Function[{x},...,First[#]==x&]]],...]. –  Daniel Lichtblau Dec 6 '13 at 22:29
This variant seems to work. Map[ With[{a = #}, Length[Select[IntegerPartitions[10], First[#] == a &]]] &, Range[10]] Out[257]= {1, 5, 8, 9, 7, 5, 3, 2, 1, 1} –  Daniel Lichtblau Dec 6 '13 at 22:31
The name is not virtual function but Pure Function in a Mathematica context. –  Sjoerd C. de Vries Dec 6 '13 at 23:41
Possibly duplicate (16947). –  Silvia Dec 7 '13 at 4:26

This is probably not going to be the best answer but offering it as an opener or as a guide to towards a better solution

Setting your initial input as a function

f[n_]:=Length[Select[IntegerPartitions[10],First[#]==n&]]


then

Map[f,Range[10]]

{1, 5, 8, 9, 7, 5, 3, 2, 1, 1}


No doubt regular contributors can improve on this

-

You can have a pure function inside a pure function even in this case, you just can't have the name of the parameter being "#" in both. This works:

Map[Function[x,
Length[Select[IntegerPartitions[10], First[#] == x &]]], Range[10]]

-

You can also perform this without "netsted functions" issue. For example:

Count[IntegerPartitions[10][[All, 1]], #] & /@ Range[10]


It could be even faster but we have to assume that you know the output of IntegerPartitions (explained on the bottom):

Reverse @ Tally[IntegerPartitions[10][[All, 1]]][[All, 2]]


Description

• IntegerPartitions[10][[All, 1]] because only first elements are important

• [[All, 2]] after Tally -> here we assume that we know that there will be a set of values from 1 to 10, otherwise some sort of filtering is needed.

• Reverse because IntegerPartitions list values are decreasing.

-