Small error and sl-store-head added.
This commit is contained in:
+20
-2
@@ -11,6 +11,7 @@
|
||||
sl-store-grep-level
|
||||
sl-store-grep
|
||||
sl-store-tail
|
||||
sl-store-head
|
||||
sl-store-enqueue!
|
||||
sl-store->list
|
||||
sl-store->display
|
||||
@@ -105,7 +106,7 @@
|
||||
(if (> (queue-length queue) ml)
|
||||
(begin
|
||||
(dequeue! queue)
|
||||
(set-sl-store-length! store (- sl-store-length store 1))
|
||||
(set-sl-store-length! store (- (sl-store-length store) 1))
|
||||
(loop))
|
||||
#t))
|
||||
)
|
||||
@@ -195,8 +196,12 @@
|
||||
(queue-length nq)
|
||||
nq))))
|
||||
|
||||
|
||||
(define (int>0? a)
|
||||
(and (integer? a) (> a 0)))
|
||||
|
||||
(define/contract (sl-store-tail store n)
|
||||
(-> sl-store? number? sl-store?)
|
||||
(-> sl-store? int>0? sl-store?)
|
||||
(let* ((q (sl-store-queue store))
|
||||
(from (if (>= n (queue-length q))
|
||||
0
|
||||
@@ -210,5 +215,18 @@
|
||||
(set! i (+ i 1))
|
||||
#f))))))
|
||||
(make-sl-store* (sl-store-max-length store) (queue-length nq) nq))))
|
||||
|
||||
(define/contract (sl-store-head store n)
|
||||
(-> sl-store? int>0? sl-store?)
|
||||
(let* ((q (sl-store-queue store))
|
||||
(until (if (>= n (queue-length q))
|
||||
(queue-length q)
|
||||
n))
|
||||
(i 0))
|
||||
(let ((nq (copy-queue q
|
||||
(λ (item)
|
||||
(set! i (+ i 1))
|
||||
(<= i n)))))
|
||||
(make-sl-store* (sl-store-max-length store) (queue-length nq) nq))))
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user