(define make-queue
(lambda ()
(let ((cells (make-vector 8)) ; 8 is arbitrary
(header (make-vector 3)))
(set-queue-length! header 0)
(set-queue-start! header 0) ; arbitrary start
(set-queue-cells! header cells)
header)))
(define empty-queue?
(lambda (queue)
(= (queue-length queue) 0)))
(define head
(lambda (queue)
(if (empty-queue? queue)
(error "attempt to take head of an empty queue")
(vector-ref (queue-cells queue)
(queue-start queue)))))