cbaines pushed a commit to branch trunk
in repository data-service.
commit 8c79536fa4ad6e7f4f6214f5d391d109afcbf51b
Author: Christopher Baines <[email protected]>
AuthorDate: Mon Mar 10 14:09:23 2025 +0000
Improve the chunking procedures
Remove the empty chunk and use = for numeric equality.
---
guix-data-service/utils.scm | 26 ++++++++++++++++----------
1 file changed, 16 insertions(+), 10 deletions(-)
diff --git a/guix-data-service/utils.scm b/guix-data-service/utils.scm
index c85bed3..4fa5813 100644
--- a/guix-data-service/utils.scm
+++ b/guix-data-service/utils.scm
@@ -76,24 +76,30 @@
(set! var var))
(define (chunk lst max-length)
- (if (> (length lst)
- max-length)
+ (let ((len (length lst)))
+ (cond
+ ((= 0 len) '())
+ ((> (length lst) max-length)
(call-with-values (lambda ()
(split-at lst max-length))
(lambda (first-lst rest)
(cons first-lst
- (chunk rest max-length))))
- (list lst)))
+ (chunk rest max-length)))))
+ (else
+ (list lst)))))
(define (chunk! lst max-length)
- (if (> (length lst)
- max-length)
+ (let ((len (length lst)))
+ (cond
+ ((= 0 len) '())
+ ((> (length lst) max-length)
(call-with-values (lambda ()
(split-at! lst max-length))
(lambda (first-lst rest)
(cons first-lst
- (chunk! rest max-length))))
- (list lst)))
+ (chunk! rest max-length)))))
+ (else
+ (list lst)))))
(define* (chunk-for-each! proc chunk-size #:rest lsts)
(define (do-one-iteration lsts)
@@ -114,10 +120,10 @@
(apply proc lsts)))
(let ((list-lengths (map length lsts)))
- (unless (eq? 1 (length (delete-duplicates list-lengths)))
+ (unless (= 1 (length (delete-duplicates list-lengths)))
(error "lists not equal length"))
- (unless (eq? 0 (first list-lengths))
+ (unless (= 0 (first list-lengths))
(do-one-iteration lsts)))
#t)