Complete 3.22
This commit is contained in:
parent
d32b389c03
commit
4604ebfa79
|
@ -0,0 +1,46 @@
|
|||
#lang sicp
|
||||
|
||||
(define (make-queue)
|
||||
(let ((front-ptr '())
|
||||
(rear-ptr '()))
|
||||
(define (front)
|
||||
(cond ((empty?)
|
||||
(error "FRONT called with empty queue"))
|
||||
(else
|
||||
(car front-ptr))))
|
||||
(define (insert! item)
|
||||
(let ((new-pair (cons item '())))
|
||||
(cond ((empty?)
|
||||
(set! front-ptr new-pair)
|
||||
(set! rear-ptr new-pair))
|
||||
(else
|
||||
(set-cdr! rear-ptr new-pair)
|
||||
(set! rear-ptr new-pair)))))
|
||||
(define (delete!)
|
||||
(cond ((empty?)
|
||||
(error "DELETE! called with empty queue"))
|
||||
(else
|
||||
(set! front-ptr (cdr front-ptr)))))
|
||||
(define (dispatch m)
|
||||
(cond ((eq? m 'empty?)
|
||||
(null? front-ptr))
|
||||
((eq? m 'front) (front))
|
||||
((eq? m 'insert!) insert!)
|
||||
((eq? m 'delete!) (delete!))
|
||||
((eq? m 'print)
|
||||
(display front-ptr)
|
||||
(newline))
|
||||
(else
|
||||
(error "Unknown method: " m))))
|
||||
dispatch))
|
||||
|
||||
(define q1 (make-queue))
|
||||
(q1 'print)
|
||||
((q1 'insert!) 'a)
|
||||
(q1 'print)
|
||||
((q1 'insert!) 'b)
|
||||
(q1 'print)
|
||||
(q1 'front)
|
||||
(q1 'print)
|
||||
(q1 'delete!)
|
||||
(q1 'print)
|
Loading…
Reference in New Issue