Blob


1 ;; weiqun zhang's solution
3 (define (make-queue)
4 (let ((front-ptr '())
5 (rear-ptr '()))
6 (define (prt-q)
7 (newline)
8 (display front-ptr))
9 (define (emp-q?)
10 (null? front-ptr))
11 (define (fro-q)
12 (if (emp-q?)
13 (error "FRONT called with an empty queue")
14 (car front-ptr)))
15 (define (ins-q! item)
16 (let ((new-pair (cons item '())))
17 (cond ((emp-q?)
18 (set! front-ptr new-pair)
19 (set! rear-ptr new-pair))
20 (else
21 (set-cdr! rear-ptr new-pair)
22 (set! rear-ptr new-pair)))))
23 (define (del-q!)
24 (cond ((emp-q?)
25 (error "DELETE! called with an empty queue"))
26 (else
27 (set! front-ptr (cdr front-ptr)))))
28 (define (dispach m)
29 (cond ((eq? m 'insert-queue!) ins-q!)
30 ((eq? m 'delete-queue!) (del-q!))
31 ((eq? m 'front-queue) (fro-q))
32 ((eq? m 'empty-queue?) (emp-q?))
33 ((eq? m 'print-queue) (prt-q))
34 (else (error "Undefined operation -- MAKE-QUEUE" m))))
35 dispatch))
36 (define (insert-queue! queue item)
37 ((queue 'insert-queue!) item)
38 queue)
39 (define (delete-queue! queue)
40 (queue 'delete-queue!)
41 queue)
42 (define (empty-queue? queue)
43 (queue 'empty-queue?))
44 (define (front-queue queue)
45 (queue 'front-queue))
46 (define (print-queue queue)
47 (queue 'print-queue))