File: queue.scm

package info (click to toggle)
scheme48 1.8%2Bdfsg-1
  • links: PTS, VCS
  • area: main
  • in suites: squeeze
  • size: 14,980 kB
  • ctags: 14,127
  • sloc: lisp: 76,272; ansic: 71,514; sh: 3,026; makefile: 637
file content (28 lines) | stat: -rw-r--r-- 569 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
; Copyright (c) 1993-2008 by Richard Kelsey and Jonathan Rees. See file COPYING.

; Queues

(define (make-queue)
  (cons '() '()))

(define (queue-empty? q)
  (and (null? (car q))
       (null? (cdr q))))

(define (enqueue! q obj)
  (set-car! q (cons obj (car q))))

(define (dequeue! q)
  (normalize-queue! q)
  (let ((head (car (cdr q))))
    (set-cdr! q (cdr (cdr q)))
    head))

(define (normalize-queue! q)
  (if (null? (cdr q))
      (begin (set-cdr! q (reverse (car q)))
	     (set-car! q '()))))

(define (queue-head q)
  (normalize-queue! q)
  (car (cdr q)))