Improve the chunking procedures

Remove the empty chunk and use = for numeric equality.
This commit is contained in:
Christopher Baines 2025-03-10 14:09:23 +00:00
parent bf3fdfd8d3
commit 8c79536fa4

View file

@ -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)