Author 
Comment/Response 
Forum Moderator
email me

10/27/98 12:18pm
> > >
> > >
> > > Is it possible to apply a list of elements as arguments of a function without going through ''for'' and ''table''?
> > >
> > > eg: something that transforms {a,b,c} in f[a,b,c]
> > >
> > > If not is it possible to make this as a ''suffix'' form? (eg: {a,b,c} </?> f )
> > >
> > > If possible reply to mail address.
> > >
> > > Thanks
> > >
> >
> > =====
> >
> > It is not exactly clear what you are wanting to do. I will guess that you have
> > some function that evaluates for 1, 2, and 3 as f[1], f[2], and f[3] respectively, but that f[{1,2,3}] returns at least partially unevaluated. If the goal is to apply f to 1, 2, and 3, that can be done in at least two ways:
> >
> >  Use Map
> >
> > In[1]:= Map [f, {1,2,3}]
> > Out[1]= {f[1],f[2],f[3]}
> >
> > If applying f to a List is common you can use the Listable Attribute
> >
> > In[2]:= SetAttributes[f, Listable]
> >
> > Now f is automatically applied to each element of the list:
> >
> > In[3]:= f[{1,2,3}]
> > Out[3]= {f[1],f[2],f[3]}
> >
> > Tom Zeller
> > Forum Moderator.
>
> No, not like this. I have a list {1,2,3} and I want to apply it to a three argument function f. What I do is this:
>
> f[ {1,2,3}[[1]]], {1,2,3}[[2]], {1,2,3}[[3]] ]
>
> There must be an easier way...
>
>
>
>
=====
You can use Sequence and Apply:
In[36]:= Apply [Sequence, {1,2,3}]
Out[36]= Sequence[1,2,3]
In[37]:= f[x_, y_, z_] := x + y + z
In[38]:= f[1,2,3]
Out[38]= 6
In[40]:= f[Apply[Sequence,{1,2,3}]]
Out[40]= 6
However, I prefer to use Lists rather than attempt to get around them, since Lists are common forms in Mathematica. In this case, in order to deal with
{1,2,3} for which f is not yet defined, i.e.
In[57]:= f[{1,2,3}]
Out[57]= f[{1,2,3}]
I add to the definition of f so that it can handle a list.
In[58]:= f[{x_, y_, z_}]:= x + y + z
In[59]:= f[{1,2,3}]
Out[59]= 6
Now f has two definitions and it will use the one that matches the particular argument.
In[60]:= ?f
''Global`f''
f[x_, y_, z_] := x + y + z
f[{x_, y_, z_}] := x + y + z
I suggest that you look at the problem in your more recent post from this point
of view as well.
Tom Zeller
Forum Moderator
URL: , 
