Hi Gernot,
In Mathematica, everything is an expression of some kind. The kind is identified by its Head. The Head of {a,b,c} is List. What Apply does is to replace the Head with something else. In this case, List is replaced by Sequence, which is the head of a sequence of items.
However, some functions look at their arguments before evaluation, and will object. This can be remedied by forcing the evaluation.
In[1]:= (* f expects 3 arguments and passes them to g *)
f[a_, b_, c_] := g[a, b, c]
In[2]:= f[a, b, c]
Out[2]= g[a, b, c]
In[3]:= (* this is returned unevaluated because there is no \
definition for f with 1 argument *)
f[{a, b, c}]
Out[3]= f[{a, b, c}]
In[4]:= (* this works fine *)
f[Sequence @@ {a, b, c}]
Out[4]= g[a, b, c]
In[5]:= (* so does this because f is willing to accept lists as the \
individual arguments *)
f[{1, 2}, {3, 4}, {5, 6}]
Out[5]= g[{1, 2}, {3, 4}, {5, 6}]
In[6]:= (* and so does this *)
f[Sequence @@ {{1, 2}, {3, 4}, {5, 6}}]
Out[6]= g[{1, 2}, {3, 4}, {5, 6}]
In[7]:= (* here is a built in function *)
Sum[x^2, {x, 1, 3}]
Out[7]= 14
In[8]:= (* this does not work because Sum looks at its arguments \
before evalauating *)
Sum[x^2, Sequence @@ {{x, 1, 3}}]
During evaluation of In[8]:= Sum::vloc: The variable Sequence@@{{x,1,3}} cannot be localized so that it can be assigned to numerical values. >>
Out[8]=
\!\(\*UnderscriptBox[\(\[Sum]\), \(Sequence @@ {{x, 1, 3}}\)]\)x^2
In[9]:= (* but if we force the evaluation, Sum is happy *)
In[10]:= Sum[x^2, Sequence @@ {{x, 1, 3}} // Evaluate]
Out[10]= 14