Re: Variable number of arguments

*To*: mathgroup at smc.vnet.net*Subject*: [mg113333] Re: Variable number of arguments*From*: Bill Rowe <readnews at sbcglobal.net>*Date*: Sun, 24 Oct 2010 06:04:34 -0400 (EDT)

On 10/23/10 at 7:04 AM, sam.takoy at yahoo.com (Sam Takoy) wrote: >I'm looking for help writing functions with variable number of >arguments. >For example, how do I accomplish the (rather artificial) task of >writing the function FunnySum that: - When called with multiple >arguments, sums them - When called with a list, sums the elements of >the list >I was hoping that the FunnySum1 below would work, but it doesn't >multiple arguments. FunnySum2 works, but is that the best solution? >FunnySum1[k__] := Apply[Plus, If[ListQ[k], Sequence[k], k]] >FunnySum1[{1, 2, 3, 4, 5, 6}] >FunnySum2[k__] := Plus[k] >FunnySum2[k_List] := Apply[Plus, Sequence[k]] >FunnySum2[1, 2, 3, 4, 5, 6] >FunnySum2[{1, 2, 3, 4, 5, 6}] What is "best"? Here is another way that is at least a simpler definition In[1]:= f[x__] := Plus @@ Flatten[{x}] In[2]:= f[{1, 2, 3}] Out[2]= 6 In[3]:= f[1, 2, 2] Out[3]= 5 In[4]:= f[1, {2, 3}, 4] Out[4]= 10 or perhaps, In[8]:= g[k__] := Plus[k] In[9]:= g[k_List] := Plus @@ k In[10]:= g[1, 2, 3] Out[10]= 6 In[11]:= g[{1, 2, 3}] Out[11]= 6 In[12]:= g[1, {2, 3}, 3] Out[12]= {6,7}