(define (queue) (cons '() '())) (define (enqueue x q) (cons (car q) (cons x (cdr q)))) (define (flush q) (cons (reverse (cdr q)) '())) (define (dequeue q) (if (null? (car q)) (dequeue (flush q)) (cons (caar q) (cons (cdar q) (cdr q))))) (define (empty? q) (and (null? (car q)) (null? (cdr q)))) (define (peek q) (car (dequeue q))) (define (print-queue q) (define (rec l leading-space?) (when (not (null? l)) (when leading-space? (display " ")) (display (car l)) (rec (cdr l) #t))) (display "#q(") (rec (car q) false) (rec (reverse (cdr q)) (not (null? (car q)))) (display ")") (newline))