123456789101112131415161718192021222324252627282930313233343536373839404142 |
- (define-module (analyzer set-queue)
- #:use-module (srfi srfi-9)
- #:export (make-set-queue
- set-queue?
- set-queue-insert!
- set-queue-remove!
- set-queue-empty?
- emptying-set-queue!))
- (define-record-type set-queue-type
- (%make-set-queue elts)
- set-queue?
- (elts sq-elts set-sq-elts!))
- ;; The following are helper functions for using list-based set-queues:
- ;; queues where an element is only inserted if it is not already in
- ;; the queue.
- (define (make-set-queue)
- (%make-set-queue '()))
- (define (set-queue-insert! sq elt)
- (if (null? (sq-elts sq))
- (set-sq-elts! sq (list elt))
- (let loop ((this (sq-elts sq)))
- (cond ((eq? (car this) elt))
- ((null? (cdr this)) (set-cdr! this (list elt)))
- (else (loop (cdr this)))))))
- (define (set-queue-remove! sq)
- (let ((old-list (sq-elts sq)))
- (set-sq-elts! sq (cdr old-list))
- (car old-list)))
- (define (set-queue-empty? sq)
- (null? (sq-elts sq)))
- (define (emptying-set-queue! sq func)
- (if (not (set-queue-empty? sq))
- (let ((next (set-queue-remove! sq)))
- (func next)
- (emptying-set-queue! sq func))))
|