From 8c79536fa4ad6e7f4f6214f5d391d109afcbf51b Mon Sep 17 00:00:00 2001 From: Christopher Baines Date: Mon, 10 Mar 2025 14:09:23 +0000 Subject: [PATCH] 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)