#lang sicp (define (make-queue) (let ((front-ptr '()) (rear-ptr '())) (define (front) (cond ((empty?) (error "FRONT called with empty queue")) (else (car front-ptr)))) (define (insert! item) (let ((new-pair (cons item '()))) (cond ((empty?) (set! front-ptr new-pair) (set! rear-ptr new-pair)) (else (set-cdr! rear-ptr new-pair) (set! rear-ptr new-pair))))) (define (delete!) (cond ((empty?) (error "DELETE! called with empty queue")) (else (set! front-ptr (cdr front-ptr))))) (define (dispatch m) (cond ((eq? m 'empty?) (null? front-ptr)) ((eq? m 'front) (front)) ((eq? m 'insert!) insert!) ((eq? m 'delete!) (delete!)) ((eq? m 'print) (display front-ptr) (newline)) (else (error "Unknown method: " m)))) dispatch)) (define q1 (make-queue)) (q1 'print) ((q1 'insert!) 'a) (q1 'print) ((q1 'insert!) 'b) (q1 'print) (q1 'front) (q1 'print) (q1 'delete!) (q1 'print)