11 (define (cell val prev next)
14 (define cell-prev cadr)
15 (define cell-next caddr)
16 (define (set-cell-prev! cell prev-cell)
17 (set-car! (cdr cell) prev-cell))
18 (define (set-cell-next! cell next-cell)
19 (set-car! (cddr cell) next-cell))
26 (if (not (null? head))
27 (let ((old-head head))
28 (set! head (cell (car args) '() old-head))
29 (set-cell-prev! old-head head))
32 (set! head (cell (car args) '() '()))
35 (let ((old-tail tail))
36 (set! tail (cell-prev old-tail))
39 (set-cell-next! tail '()))
42 (let loop ((this-cell head))
45 (cons (cell-val this-cell)
46 (loop (cell-next this-cell))))))))))
48 (define (fifo-push fifo x)
51 (define (fifo-pop fifo)
54 (define (fifo->list fifo)