title: Preventing evaluation of Mathematica expressions
body: <p>In a recent <a href="https://stackoverflow.com/q/4851948/421225">SO question</a> three different answers were supplied each using a different method of preventing the evaluation of the <code>Equal[]</code> expression.  They were </p>
  
  <ol>
  <li><code>Defer[]</code></li>
  <li><code>Unevaluated[]</code></li>
  <li><code>HoldForm[]</code></li>
  </ol>
  
  <p>Sometimes I still have trouble choosing between these options (and judging by answers to the <a href="https://stackoverflow.com/q/4851948/421225">before mentioned question</a>, the choice isn't always clear for other people either).  Can someone write a clear exposition on the use of these three methods?</p>
  
  <hr>
  
  <p>There are three other wrappers
   <code>Hold[]</code>,
   <code>HoldPattern[]</code>,
   <code>HoldComplete[]</code>,
  and the various <code>Attributes</code> for functions 
   <code>HoldAll</code>, <code>HoldFirst</code>, <code>HoldRest</code> and the numeric versions <code>NHold*</code> that can also be discussed if you wish!</p>
  
  <h2>Edit</h2>
  
  <p>I just noticed that this is basically a repeat of the old <a href="https://stackoverflow.com/q/1616592/421225">question</a> (which I had already upvoted, just forgotten...). The accepted answer linked to <a href="http://library.wolfram.com/conferences/devconf99/villegas/UnevaluatedExpressions/" rel="noreferrer">this talk</a> at the 1999 Mathematica Developer Conference, which doesn't discuss <code>Defer</code> since it is "New in 6". <code>Defer</code> is more closely linked to the frontend than the other evaluation control mechanisms.  It is used to create an unevaluated output that will be evaluated if supplied in and <code>Input</code> expression. To quote the <a href="http://reference.wolfram.com/mathematica/ref/Defer.html" rel="noreferrer">Documentation Center</a>:</p>
  
  <blockquote>
    <p>Defer[expr] returns an object which
    remains unchanged until it is
    explicitly supplied as Mathematica
    input, and evaluated using
    Shift+Enter, Evaluate in Place, etc.</p>
  </blockquote>