26 lines
550 B
Scheme
26 lines
550 B
Scheme
(define (make-queue)
|
|
(let ((q (cons '() '())))
|
|
(lambda (cmd . arg)
|
|
(case cmd
|
|
((empty?) (null? (car q)))
|
|
((put) (let ((a (cons (car arg) '())))
|
|
(if (null? (car q))
|
|
(begin (set-car! q a) (set-cdr! q a))
|
|
(begin (set-cdr! (cdr q) a) (set-cdr! q a)))))
|
|
((get) (if (null? (car q)) 'empty
|
|
(let ((x (caar q)))
|
|
(set-car! q (cdar q))
|
|
(if (null? (car q)) (set-cdr! q '()))
|
|
x)))
|
|
))))
|
|
|
|
(define q (make-queue))
|
|
(q 'put 1)
|
|
(q 'put 6)
|
|
(q 'get)
|
|
; 1
|
|
(q 'get)
|
|
; 6
|
|
(q 'get)
|
|
; empty
|