# General function taking general number of arguments

The following is an edit of this post, for which a working solution was provided by John McGee. I have a different function and am not sure how to adapt the solution for it:

I want to construct a function that accepts multiple arguments, but where the number of arguments can change according to the length of a list that I insert as the set of arguments. For example, I have a table which has as elements the following lists:

{{1,2,3,4},{1,2,3,4,5,6},{1,2,3,4,5,6,7,8}, ...}

Note that the first list within the table has a length of 4, with progressive lists having an extra length of 2 compared to its previous. I have created the following function which works for the first list in the table:

f[{a,b,c,d}]:= (y[2] - c)*(y[2] - d)*Exp[2y[1](a - b) + (a^2 - b^2)+ 2y[2](c - d) + (c^2 - d^2)]

Similarly the function for the second list in the table should be:

f[{a,b,c,d,e,f}]:= (y[3] - e)*(y[3] - f)*Exp[2y[1](a - b) + (a^2 - b^2)+ 2y[2](c - d) +
(c^2 - d^2) + 2y[3](e - f) + (e^2 - f^2)]

There is a pattern which obeys the following:

1. The coefficient in front of the exponential is always (y[n]- (element 1 of nth pair))*(y[n]- (element 2 of nth pair)) - where n is the number of the nth pair of elements in the list - i.e. for 3 pairs n would be 3 etc.
2. In the exponent, the argument of y is the number of the pair being considered and the terms within the parenthesis is similarly the first element of each pair minus the second element of each pair.

I want to create a table that has as elements the result of the function. So the first element of such a table will be the evaluation to the above. The second element of the table should be the evaluation of the function also written explicitly above and so on.

How can I create the general function that accepts a varying number of arguments? I will need to loop over this function to assess it for the different lists in the table above.

ClearAll[eF]
eF[z_: y] := Module[{j = 1, p = Partition[#, 2]},
First[Times @@ (z[Length@p] - p[[-1]]) Exp[Total[(Subtract[##] 2 z[j++] + {#-#2}^2) & @@@ p]]]] &

Examples:

ClearAll[a, b, c, d, e, f]
eF[][{a, b, c, d}]
(* E^((a-b)^2+(c-d)^2+2 (a-b) y[1]+2 (c-d) y[2]) (-c+y[2]) (-d+y[2]) *)
eF[][{a, b, c, d, e, f}]
(* E^((a-b)^2+(c-d)^2+(e-f)^2+2 (a-b) y[1]+2 (c-d) y[2]+2 (e-f) y[3]) (-e+y[3]) (-f+y[3]) *)
• Does exactly what I wanted and is completely general for everyone to use! Thanks kguler! – Jas Feb 23 '15 at 14:29
• @Jas, my pleasure; glad i could help. – kglr Feb 23 '15 at 14:29