; parallel assignment

(define-syntax pset!
  (syntax-rules ()
    [(_ [x e] ...)
     (for-each
       (lambda (f v) (f v))
       (list (lambda (t) (set! x t)) ...)
       (list e ...))]))

(define a 1) (define b 2) (define c 3)
(display (list a b c)) (newline)
(pset! (a b) (b c) (c a))
(display (list a b c)) (newline)