title: Two simple push functions; one permanently mutates global var, other doesn't, why?
body: <p>Here are two simple functions that use <code>push</code> on a variable passed in:</p>
  
  <p><code>(defun push-rest (var) (push 99 (rest var)))</code></p>
  
  <p>and</p>
  
  <p><code>(defun just-push (something) (push 5 something))</code></p>
  
  <p>The first one will permanently mutate the <code>var</code> passed. The second does not. This is quite confusing for someone who is learning the scoping behavior of this language:</p>
  
  <pre><code>CL-USER&gt; (defparameter something (list 1 2))    
  SOMETHING
  CL-USER&gt; something
  (1 2)
  CL-USER&gt; (just-push something)
  (5 1 2)
  CL-USER&gt; something
  (1 2)
  CL-USER&gt; (push-rest something)
  (99 2)
  CL-USER&gt; something
  (1 99 2)
  </code></pre>
  
  <p>In <code>push-rest</code> why isn't the var's scope local to the function like in <code>just-push</code>, when they are both using the same function, <code>push</code>?</p>