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
+1
View File
@@ -267,4 +267,5 @@
(err-test "Dit is nog een foutbericht") (err-test "Dit is nog een foutbericht")
(fatal-test "JA!") (fatal-test "JA!")
(dbg-test "Oke, nog een debug bericht") (dbg-test "Oke, nog een debug bericht")
(sl-log-to-store 10)
) )
+20 -2
View File
@@ -11,6 +11,7 @@
sl-store-grep-level sl-store-grep-level
sl-store-grep sl-store-grep
sl-store-tail sl-store-tail
sl-store-head
sl-store-enqueue! sl-store-enqueue!
sl-store->list sl-store->list
sl-store->display sl-store->display
@@ -105,7 +106,7 @@
(if (> (queue-length queue) ml) (if (> (queue-length queue) ml)
(begin (begin
(dequeue! queue) (dequeue! queue)
(set-sl-store-length! store (- sl-store-length store 1)) (set-sl-store-length! store (- (sl-store-length store) 1))
(loop)) (loop))
#t)) #t))
) )
@@ -195,8 +196,12 @@
(queue-length nq) (queue-length nq)
nq)))) nq))))
(define (int>0? a)
(and (integer? a) (> a 0)))
(define/contract (sl-store-tail store n) (define/contract (sl-store-tail store n)
(-> sl-store? number? sl-store?) (-> sl-store? int>0? sl-store?)
(let* ((q (sl-store-queue store)) (let* ((q (sl-store-queue store))
(from (if (>= n (queue-length q)) (from (if (>= n (queue-length q))
0 0
@@ -211,4 +216,17 @@
#f)))))) #f))))))
(make-sl-store* (sl-store-max-length store) (queue-length nq) nq)))) (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))))
+9
View File
@@ -288,6 +288,15 @@ Returns a store containing the last @racket[count] entries. If
@racket[count] is greater than the store length, all entries are returned. @racket[count] is greater than the store length, all entries are returned.
} }
@defproc[(sl-store-head [store any/c]
[count exact-nonnegative-integer?])
any/c]{
Returns a store containing the first @racket[count] entries. If
@racket[count] is greater than the store length, all entries are returned.
}
@section{Store examples} @section{Store examples}
@racketblock[ @racketblock[