(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)))))