Code Review
Compare your solutions
#| BEGIN (Write your solution here) |#
(define (make-queue)
(let ((front-ptr '())
(rear-ptr '()))
(define (set-front-ptr! item) (set! front-ptr item))
(define (set-rear-ptr! item) (set! rear-ptr item))
(define (empty?)
(null? front-ptr))
(define (insert! item)
(let ((new-pair (cons item '())))
(cond ((empty?)
(set-front-ptr! new-pair)
(set-rear-ptr! new-pair)
dispatch)
(else
(set-cdr! rear-ptr new-pair)
(set-rear-ptr! new-pair)
dispatch))))
(define (delete!)
(cond ((empty?)
(error "DELETE! called with an empty queue"))
(else
(set-front-ptr! (cdr front-ptr))
dispatch)))
(define (front)
(cond ((empty?)
(error "FRONT called with an empty queue"))
(else
(car front-ptr))))
(define (print)
(display front-ptr))
(define (dispatch m)
(cond ((eq? m 'empty-queue?) (empty?))
((eq? m 'insert-queue!) insert!)
((eq? m 'delete-queue!) (delete!))
((eq? m 'front-queue) (front))
((eq? m 'print-queue) (print))
(else
(error "Invalid operation -- DISPATCH" m))))
dispatch))
#| END |#