; two swaps

(define (two-swaps a b c)
  (define-syntax swap!
    (syntax-rules ()
      ((swap! x y)
        (let ((z x))
          (set! x y)
          (set! y z)))))
  (if (< a b)
      (if (< a c)
          (swap! a a)
          (swap! a c))
      (if (< b c)
          (swap! a b)
          (swap! a c)))
  (if (< b c)
      (swap! b b)
      (swap! b c))
  (list a b c))

(display (two-swaps 1 2 3)) (newline)
(display (two-swaps 1 3 2)) (newline)
(display (two-swaps 2 1 3)) (newline)
(display (two-swaps 2 3 1)) (newline)
(display (two-swaps 3 1 2)) (newline)
(display (two-swaps 3 2 1)) (newline)