(define (make-q)
(let ((front-ptr '())
(rear-ptr '()))
(define (empty-q?)
(null? front-ptr))
(define (insert-q itm)
(let ((new-pair (cons itm '())))
(if (empty-q?)
(begin
(set! front-ptr new-pair)
(set! rear-ptr new-pair))
(begin
(set-cdr! rear-ptr new-pair)
(set! rear-ptr new-pair)))
front-ptr))
(define (front-q)
(if (empty-q?)
(error "FRONT called with an empty queue" front-ptr)
(car front-ptr)))
(define (delete-q)
(cond ((empty-q?)
(error "DELETE! called with an empty queue" front-ptr))
(else
(set! front-ptr (cdr front-ptr)))))
(define (dispatch m)
(cond ((eq? m 'empty-q?) (empty-q?))
((eq? m 'insert-q) insert-q)
((eq? m 'front-q) (front-q))
((eq? m 'delete-q) (delete-q))))
dispatch))
No comments:
Post a Comment