(define enqueue!
(lambda (queue new-item)
(let ((length (queue-length queue))
(start (queue-start queue))
(cells (queue-cells queue)))
(if (= length (vector-length cells))
(begin
(enlarge-queue! queue)
(enqueue! queue new-item))
(begin ; maintain representation invariant
(vector-set! cells
(remainder (+ start length)
(vector-length cells))
new-item)
(set-queue-length! queue (+ length 1))
queue)))))
Writing dequeue is Exercise 13.11.