title: In Scheme, what's the point of "set!"?
body: <p>What's the point of using the <code>set!</code> assignment operator in scheme? Why not just <code>rebind</code> a variable to a new value using <code>define</code>?</p>
  
  <pre><code>&gt; (define x 100)
  &gt; (define (value-of-x) x) ;; value-of-x closes over "x"
  &gt; x
  100
  &gt; (value-of-x)
  100
  &gt; (set! x (+ x 1))
  &gt; x
  101
  &gt; (value-of-x)
  101
  &gt; (define x (+ x 1))
  &gt; x
  102
  &gt; (value-of-x)
  102
  &gt; 
  </code></pre>