Complete 3.22

This commit is contained in:
Oliver Payne 2022-05-06 17:01:36 +01:00
parent d32b389c03
commit 4604ebfa79
1 changed files with 46 additions and 0 deletions

46
3_22.rkt Normal file
View File

@ -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)