- Code: Select all
(defun make-queue
(lambda ()
(let ((front '()) (back '()))
(lambda (cmd . data)
(define exchange
(lambda ()
(set! front (reverse back))
(set! back '())))
(case cmd
((push) (push (car data) back))
((pop) (or (pop front)
(begin
(exchange)
(pop front))))
((peek) (unless (pair? front)
(exchange))
(car front))
((show) (format #t "~s\n" (append front (reverse back))))
((fb) (format #t "front: ~s, back: ~s\n" front back))
(else (error "Illegal cmd to queue object" cmd)))))))