; queue = (cons in out) (define (make-queue) '(() . ())) ; writing: just push the in stack (define (queue-write! queue thing) (set-car! queue (cons thing (car queue)))) ; reading: if out stack is zero, pop-push in to out (define (queue-read! queue) (if (null? (cdr queue)) (begin (if (null? (car queue)) (throw 'queue-empty)) (set-cdr! queue (reverse! (car queue))) (set-car! queue '()) (queue-read! queue)) (let ((thing (cadr queue))) (set-cdr! queue (cddr queue)) thing)))