Код Ревью

Сравни свои решения

    #| BEGIN (Write your solution here) |#
(define (make-queue)
  (let ((front-ptr '())
        (rear-ptr '()))
    (define (empty?)
      (null? front-ptr))
    (define (front)
      (if (empty?)
          (error "FRONT called with on empty queue")
          (car front-ptr)))
    (define (insert! item)
      (if (empty?)
          (begin
            (set! front-ptr (mcons item '()))
            (set! rear-ptr front-ptr))
          (begin
            (set-mcdr! rear-ptr (mcons item '()))
            (set! rear-ptr (mcdr rear-ptr)))))
    (define (delete!)
      (if (empty?)
          (error "DELETE! called with on empty queue")
          (set! front-ptr (mcdr front-ptr))))

    (define (dispatch m)
      (cond ((eq? m 'empty?) (empty?))
            ((eq? m 'front-queue) (front))
            ((eq? m 'insert-queue!) insert!)
            ((eq? m 'delete-queue!) (delete!))
            (else
             (error "MAKE-QUEUE Invalid command" m))))
    dispatch))
#| END |#