(define (make-queue) (let ((front-ptr nil) (rear-ptr nil)) (define (empty-queue?) (null? front-ptr)) (define (insert-queue! item) (let ((new-pair (cons item nil))) (cond ((empty-queue?) (set! front-ptr new-pair) (set! rear-ptr new-pair) front-ptr) (else (set-cdr! rear-ptr new-pair) (set! rear-ptr (cdr rear-ptr)) front-ptr)))) (define (delete-queue!) (cond ((empty-queue?) (error "DELETE-QUEUE! called with an empty queue")) (else (set! front-ptr (cdr front-ptr)) front-ptr))) (define (dispatch msg) (cond ((eq? msg 'insert-queue) (lambda (item) (insert-queue! item))) ((eq? msg 'delete-queue) (delete-queue!)) (else (display "error")))) dispatch)) (define myqueue (make-queue)) ((myqueue 'insert-queue) 10) ((myqueue 'insert-queue) 11) ((myqueue 'insert-queue) 12) (myqueue 'delete-queue) ((myqueue 'insert-queue) 1) (myqueue 'delete-queue) (myqueue 'delete-queue) (myqueue 'delete-queue) (myqueue 'delete-queue)