S9 LIB  (dec! <variable>)                ==>  unspecific
        (inc! <variable>)                ==>  unspecific
        (pop! <variable>)                ==>  object
        (push! object <variable>)        ==>  unspecific
        (set-vars! <variable> ... list)  ==>  unspecific
        (swap! <variable1> <variable2>)  ==>  unspecific

PUSH! conses OBJECT to the list bound to <variable>,
and updates the value of <variable> to the new list.

POP! removes the first element of the list bound to
<variable> and updates <variable> to the rest of that
list. It returns the element removed from the list.

INC! and DEC! increment and decrement the value of
the given variable, respectively.

SET-VARS! sets the given <variable>s to the values in
LIST. It may be used to set variables to multiple values
that are returned from a procedure in a list.

SWAP! swap the values bound to <variable1> and <variable2>.

(let ((stack (list 0 2 3 4)))
  (let ((x (pop! stack)))
    (push! 1 stack)
    (list x stack)))           ==>  (0 (1 2 3 4))

(let ((x 1))
  (dec! x)
  x)          ==>  0

(let ((a 0) (b 0) (c 0))
  (set-vars! a b c '(foo bar baz))
  (list a b c))                     ==>  (foo bar baz)

(let ((a 0)
      (b 1))
  (swap! a b)
  (list a b))  ==>  (1 0)
