Small error and sl-store-head added.

This commit is contained in:
2026-08-03 13:26:36 +02:00
parent 58da0a3d79
commit f88ee4951e
3 changed files with 30 additions and 2 deletions
+20 -2
View File
@@ -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))))