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 |#