title: Mathematica: Unevaluated vs Defer vs Hold vs HoldForm vs HoldAllComplete vs etc etc
body: <p>I'm bewildered by all the built-in Mathematica functions that purport to prevent evaluation in some way: <code>Unevaluated</code>, <code>Defer</code>, <code>Hold</code>, and over half a dozen of the form <code>Hold*</code>.  The Mathematica documentation just explains each function in isolation without explaining why you would choose one or the other.  Can anyone offer a coherent explanation of all these functions?  The whole thing seems like a convoluted mess to me.  Relating it all to Lisp macros might be a good place to start.</p>
  
  <p>Most of the Mathematica language is amazingly well-designed but it seems like Wolfram really painted himself into a corner on this aspect.  Or I could be missing something.</p>