Can set-car! and set-cdr! be implemented as macros?
===

Is it possible to implement `set-car!` and `set-cdr!` _portably_ as macros using `set!` in Scheme?  Or would this require special access to the underlying storage system?

I'm asking because I'm implementing my own Scheme interpreter, and I'd like to have as much as possible out in scheme code.  My first implementation attempt of `set-cdr!` was this:

    (define-syntax set-cdr!·
      (syntax-rules ()
        ((set-cdr! location value)
         (set! location (cons (car location) value)))))

This works _mostly_, but not for circular lists.  So, this does not produce a circular list:

    #; mickey> (define x (list 1 2))
    #; mickey> x
    (1 2)
    #; mickey> (set-cdr! x x)
    #; mickey> x
    (1 1 2)
