Take the 2-minute tour ×
Mathematica Stack Exchange is a question and answer site for users of Mathematica. It's 100% free, no registration required.

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?

share|improve this question
    
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
add comment

2 Answers

up vote 9 down vote accepted

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.

share|improve this answer
2  
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
2  
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  
+1 Great explanation. The first sentence should be in the documentation :-) –  Simon Woods Feb 8 '13 at 20:53
show 1 more comment

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]
share|improve this answer
    
+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
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.