I added (but have not pushed, apprently) queue-map. Mind if we keep
that one instead?
Also, I think that a rename like the below is a bad idea if the queues
have been released already.
Robby
On Tue, Nov 16, 2010 at 3:37 PM, rafk...@racket-lang.org wrote:
rafkind has updated `master' from b8bbed6eb4 to 7b24eaf58e.
http://git.racket-lang.org/plt/b8bbed6eb4..7b24eaf58e
=[ 2 Commits ]==
Directory summary:
22.4% collects/data/scribblings/
35.6% collects/data/
41.8% collects/tests/data/
~~
73be679 Jon Rafkind rafk...@racket-lang.org 2010-11-16 12:02
:
| add queue-list
:
M collects/data/queue.rkt | 20 +++-
M collects/data/scribblings/queue.scrbl | 12
M collects/tests/data/queue.rkt | 12 +++-
~~
7b24eaf Jon Rafkind rafk...@racket-lang.org 2010-11-16 14:36
:
| rename queue-count to queue-length
:
M collects/data/queue.rkt | 6 +++---
M collects/data/scribblings/queue.scrbl | 8
M collects/tests/data/queue.rkt | 14 +++---
=[ Overall Diff ]===
collects/data/queue.rkt
~~~
--- OLD/collects/data/queue.rkt
+++ NEW/collects/data/queue.rkt
@@ -31,7 +31,24 @@
(set-queue-head! q (link-tail old))
(link-value old)))
-(define (queue-count queue)
+(define (queue-list queue)
+ (let loop ([link (queue-head queue)]
+ [out '()])
+ (if (not link)
+ (reverse out)
+ (loop (link-tail link) (cons (link-value link) out)
+
+;; queue-vector could be implemented as (list-vector (queue-list q))
+;; but this is somewhat slow. a direct translation between queue's and
+;; vector's should be fast so the ideal situation is not to use a list
+;; as an intermediate data structure.
+;; maybe add the elements to a gvector and use gvector-vector?
+
+;; could use (length (queue-list q)) here but that would double
+;; the time it takes to get the length
+;; probably if `queue-vector' gets implemented it would be better to
+;; do (vector-length (queue-vector q))
+(define (queue-length queue)
(let loop ([link (queue-head queue)]
[count 0])
(if (not link)
@@ -56,6 +73,7 @@
[queue? (- any/c boolean?)]
[make-queue (- queue/c)]
[queue-empty? (- queue/c boolean?)]
- [queue-count (- queue/c integer?)])
+ [queue-length (- queue/c integer?)]
+ [queue-list (- queue/c (listof any/c))])
(provide enqueue! dequeue!)
collects/data/scribblings/queue.scrbl
~
--- OLD/collects/data/scribblings/queue.scrbl
+++ NEW/collects/data/scribblings/queue.scrbl
@@ -34,17 +34,29 @@ thread-unsafe way.
(dequeue! q)]
}
-...@defproc[(queue-count [queue queue/c]) integer?]{
+...@defproc[(queue-list [queue queue/c]) (listof any/c)]{
+ Returns an immutable list containing the elements of the queue
+ in the order the elements were added.
+
+ �...@defexamples[#:eval qeval
+ (define queue (make-queue))
+ (enqueue! queue 8)
+ (enqueue! queue 9)
+ (enqueue! queue 0)
+ (queue-list queue)]
+}
+
+...@defproc[(queue-length [queue queue/c]) integer?]{
Returns the number of elements in the queue.
@defexamples[#:eval qeval
(define queue (make-queue))
- (queue-count queue)
+ (queue-length queue)
(enqueue! queue 5)
(enqueue! queue 12)
- (queue-count queue)
+ (queue-length queue)
(dequeue! queue)
- (queue-count queue)]
+ (queue-length queue)]
}
�...@defproc[(queue-empty? [q queue/c]) boolean?]{
collects/tests/data/queue.rkt
~
--- OLD/collects/tests/data/queue.rkt
+++ NEW/collects/tests/data/queue.rkt
@@ -34,21 +34,21 @@
(dequeue! q)
(dequeue! q)
(check-true (queue-empty? q)
- (test-suite count
- (test-case count empty
+ (test-suite length
+ (test-case length empty
(let* ([queue (make-queue)])
- (check-equal? (queue-count queue) 0)))
- (test-case count enqueue once
+ (check-equal? (queue-length queue) 0)))
+ (test-case length enqueue once
(let* ([queue (make-queue)])
(enqueue! queue 5)
- (check-equal? (queue-count queue) 1)))
- (test-case count enqueue thrice dequeue once
+ (check-equal? (queue-length queue) 1)))
+ (test-case length enqueue thrice dequeue once
(let* ([queue (make-queue)])
(enqueue! queue 5)
(enqueue! queue 9)
(enqueue! queue 12)
(dequeue! queue)
- (check-equal? (queue-count queue) 2
+ (check-equal? (queue-length queue) 2
(test-suite dequeue!
(test-case make-queue
(check-exn exn:fail? (lambda () (dequeue! (make-queue)
@@ -63,4 +63,14 @@
(enqueue! q 2)
(check-equal? (dequeue! q) 1)