title: Implement SICP evaluator using Racket
body: <p>I'm working on metacircular evaluator of <code>4.1.4 Running the Evaluator as a Program</code>, building which with Racket:</p>
  
  <pre><code>#lang racket
  
  (require (combine-in rnrs/base-6
                       rnrs/mutable-pairs-6))
  
  (define (evaluate exp)
    (cond 
      ; ...
      ((definition? exp) (display exp)
                         (display " is a definition\n"))
      ; ...
      (else (display exp) 
            (display " is something else\n"))))
  
  (define (definition? exp)
    (tagged-list? exp 'define))
  
  (define (tagged-list? exp tag)
    (if (pair? exp)
        (eq? (car exp) tag)
        false))
  
  (define (driver-loop)
    (let ((input (read)))
      (let ((output (evaluate input)))
        output))
    (driver-loop))
  
  (driver-loop)
  </code></pre>
  
  <p>After getting a box that reads input in DrRacket successfully, I type in <code>(define a 0)</code> and it turn out:</p>
  
  <p><code>(define a 0) is something else</code></p>
  
  <p>It could be recognised if I remove</p>
  
  <pre><code>(require (combine-in rnrs/base-6
                       rnrs/mutable-pairs-6))
  </code></pre>
  
  <p>But without which I wouldn't be able to call <code>set-car!</code> or <code>set-cdr!</code>. Is there an alternative for <code>set-</code> function?</p>
  
  <p>Or could I choose what to import from <code>rnrs/base-6</code> and <code>rnrs/mutable-pairs-6</code> ?</p>