(define *queue* '())
(define *tail* '())
(define (enq x) (cond
((null? *queue*)
(set! *queue* (list x))
(set! *tail* *queue* ) )
(else
(set-cdr! *tail* (list x))
(set! *tail* (cdr *tail*)) ))
*queue*)
(define (deq . ret) (cond
((null? *queue*) '())
(else (set! ret (car *queue*))
(set! *queue* (cdr *queue*))
(if (null? *queue*) (set! *tail* '()))
ret) ))
(format #t "1>>~A:~A~%" (enq 1) *tail*)
(format #t "3>>~A:~A~%" (enq 3) *tail*)
(format #t "5>>~A:~A~%" (enq 5) *tail*)
;; *tail*:V
;; *queue*:1->3->5->nil
(format #t "7>>~A:~A~%" (enq 7) *tail*)
;; *queue*:1->3->5->7->nil
;; *tail*:^
(set-car! *tail* 9)
;; *tail*:V
;; *queue*:1->3->5->9->nil
(format #t "9!!~A:~A~%" *queue* *tail*)
(format #t "~A<<~A:~A~%" (deq) *queue* *tail*)
(format #t "~A<<~A:~A~%" (deq) *queue* *tail*)
(format #t "~A<<~A:~A~%" (deq) *queue* *tail*)
(format #t "~A<<~A:~A~%" (deq) *queue* *tail*)
(format #t "~A<<~A:~A~%" (deq) *queue* *tail*)