Improve the chunking procedures
Remove the empty chunk and use = for numeric equality.
This commit is contained in:
parent
bf3fdfd8d3
commit
8c79536fa4
1 changed files with 16 additions and 10 deletions
|
|
@ -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)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue