# Splicing a list of arguments into a function with Sequence

Not sure if this has been asked, but I have a fairly simple operation that I don't know the syntax for. Say I have an array with some values, and a function f that accepts an arbitrary number of arguments. The following:

array = {e,f};
f[a, b, c, d, array];


...is functionally equivalent to:

f[a, b, c, d, {e, f}];


OK, will Sequence help? Nope, this does the same thing:

f[a, b, c, d, Sequence@array];


Essentially, I want to include e and f into the list of arguments, i.e. I want to know the syntax for telling Mathematica I want it to evaluate this:

f[a, b, c, d, e, f];


How do I go about doing this?

-
What about renaming the question to something like "Splicing a list of arguments into a function with Sequence" or similar? – Yves Klett Feb 8 '13 at 14:01
Sure, sounds better to me... – Guillochon Feb 8 '13 at 19:43

Sequence means more or less "no head". What you want to do is to remove the head List from an inner list. Or, put in another way, you want to replace this head with "no head". The operation that changes one head to another is Apply. Therefore, what you really want is

f[a, b, c, d, Sequence @@ array]


where @@ stands for Apply.

-
Half of my Mathematica questions are answered by adding one more @ symbol... :) – Guillochon Feb 8 '13 at 2:28
@Guillochon Thanks for the accept, although you could have given it some more time - perhaps someone would come up with a better answer. – Leonid Shifrin Feb 8 '13 at 2:30
In this case, the answer was so simple that I didn't think anyone could do better. That being said, perhaps something should be added to the Etiquette section of the FAQ to indicate that one should wait some amount of time before accepting? – Guillochon Feb 8 '13 at 2:35
@Guillochon This may be a good idea. – Leonid Shifrin Feb 8 '13 at 2:40
+1 Great explanation. The first sentence should be in the documentation :-) – Simon Woods Feb 8 '13 at 20:53

You can certainly bypass the use of Sequence[] (though it is certainly a neat thing):

f[a, b, c, d, ##] & @@ array
f[a, b, c, d, e, f]

-
+1. The extent to which this can be called "bypassing" depends on whether or not SlotSequence (##) uses Sequence internally. One thing I am certain about is that both use the same underlying mechanism. In particular, Sequence @@ array can be also written as ##& @@ array (a form beloved by @Mr.Wizard). The discussion in comments below my answer to this question seems relevant here. – Leonid Shifrin Feb 8 '13 at 16:04