# Why there is only HoldFirst but no HoldSecond, HoldThird, …HoldN?

I feel that this must be a duplicate. But I just can't find such a post.

Mathematica has HoldFirst, HoldRest, HoldAll.

Why are these three "Hold"s sufficient? Why there is no HoldSecond, HoldThird, ... HoldN?

What if I want to hold several variables at different positions? For example how can I hold first and third at the same time?

• Would HoldAll give you unwanted consequences in the case you describe? – MarcoB Nov 2 '15 at 16:38
• Duplicate is on SO: Hold any argument – jkuczm Nov 2 '15 at 21:02
• Any reason one couldn't do f[heldStuff_List, notHeld1_,...] with HoldFirst? – N.J.Evans Nov 2 '15 at 21:06
• @N.J.Evans I drop a comment to m_goldberg, that also reply to your comment – matheorem Nov 3 '15 at 1:08
• @MarcoB thank you, you are right, HoldAll works for the function that I am currently working with. – matheorem Nov 3 '15 at 1:23

There is no need for HoldSecond, etc., because arguments can always be reordered so the held argument is the first one. HoldRest is needed so an indefinite number of arguments can be passed, but the first argument subjected to pattern matching to discriminate which of many function definitions applies. HoldAll handles almost all other cases of non-standard evaluation, but see HoldAllComplete and SequenceHold.