fork download
  1. (define *queue* '())
  2. (define *tail* '())
  3.  
  4. (define (enq x) (cond
  5. ((null? *queue*)
  6. (set! *queue* (list x))
  7. (set! *tail* *queue* ) )
  8. (else
  9. (set-cdr! *tail* (list x))
  10. (set! *tail* (cdr *tail*)) ))
  11. *queue*)
  12.  
  13. (define (deq . ret) (cond
  14. ((null? *queue*) '())
  15. (else (set! ret (car *queue*))
  16. (set! *queue* (cdr *queue*))
  17. (if (null? *queue*) (set! *tail* '()))
  18. ret) ))
  19.  
  20. (format #t "1>>~A:~A~%" (enq 1) *tail*)
  21. (format #t "3>>~A:~A~%" (enq 3) *tail*)
  22. (format #t "5>>~A:~A~%" (enq 5) *tail*)
  23. ;; *tail*:V
  24. ;; *queue*:1->3->5->nil
  25. (format #t "7>>~A:~A~%" (enq 7) *tail*)
  26. ;; *queue*:1->3->5->7->nil
  27. ;; *tail*:^
  28.  
  29. (set-car! *tail* 9)
  30. ;; *tail*:V
  31. ;; *queue*:1->3->5->9->nil
  32. (format #t "9!!~A:~A~%" *queue* *tail*)
  33.  
  34. (format #t "~A<<~A:~A~%" (deq) *queue* *tail*)
  35. (format #t "~A<<~A:~A~%" (deq) *queue* *tail*)
  36. (format #t "~A<<~A:~A~%" (deq) *queue* *tail*)
  37. (format #t "~A<<~A:~A~%" (deq) *queue* *tail*)
  38. (format #t "~A<<~A:~A~%" (deq) *queue* *tail*)
  39.  
Success #stdin #stdout 0.03s 4132KB
stdin
Standard input is empty
stdout
1>>(1):(1)
3>>(1 3):(3)
5>>(1 3 5):(5)
7>>(1 3 5 7):(7)
9!!(1 3 5 9):(9)
1<<(3 5 9):(9)
3<<(5 9):(9)
5<<(9):(9)
9<<():()
()<<():()