[1] If the first item is the final item in the queue, the front pointer will be the empty list after the deletion, which will mark the queue as empty; we needn't worry about updating the rear pointer, which will still point to the deleted item, because empty-queue? is_empty_queue looks only at the front pointer.
[2] Be careful not to make the interpreter try to print a structure that contains cycles. (See exercise 3.13.)
3.3.2   Representing Queues