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))
|
(set! var var))
|
||||||
|
|
||||||
(define (chunk lst max-length)
|
(define (chunk lst max-length)
|
||||||
(if (> (length lst)
|
(let ((len (length lst)))
|
||||||
max-length)
|
(cond
|
||||||
|
((= 0 len) '())
|
||||||
|
((> (length lst) max-length)
|
||||||
(call-with-values (lambda ()
|
(call-with-values (lambda ()
|
||||||
(split-at lst max-length))
|
(split-at lst max-length))
|
||||||
(lambda (first-lst rest)
|
(lambda (first-lst rest)
|
||||||
(cons first-lst
|
(cons first-lst
|
||||||
(chunk rest max-length))))
|
(chunk rest max-length)))))
|
||||||
(list lst)))
|
(else
|
||||||
|
(list lst)))))
|
||||||
|
|
||||||
(define (chunk! lst max-length)
|
(define (chunk! lst max-length)
|
||||||
(if (> (length lst)
|
(let ((len (length lst)))
|
||||||
max-length)
|
(cond
|
||||||
|
((= 0 len) '())
|
||||||
|
((> (length lst) max-length)
|
||||||
(call-with-values (lambda ()
|
(call-with-values (lambda ()
|
||||||
(split-at! lst max-length))
|
(split-at! lst max-length))
|
||||||
(lambda (first-lst rest)
|
(lambda (first-lst rest)
|
||||||
(cons first-lst
|
(cons first-lst
|
||||||
(chunk! rest max-length))))
|
(chunk! rest max-length)))))
|
||||||
(list lst)))
|
(else
|
||||||
|
(list lst)))))
|
||||||
|
|
||||||
(define* (chunk-for-each! proc chunk-size #:rest lsts)
|
(define* (chunk-for-each! proc chunk-size #:rest lsts)
|
||||||
(define (do-one-iteration lsts)
|
(define (do-one-iteration lsts)
|
||||||
|
|
@ -114,10 +120,10 @@
|
||||||
(apply proc lsts)))
|
(apply proc lsts)))
|
||||||
|
|
||||||
(let ((list-lengths (map length 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"))
|
(error "lists not equal length"))
|
||||||
|
|
||||||
(unless (eq? 0 (first list-lengths))
|
(unless (= 0 (first list-lengths))
|
||||||
(do-one-iteration lsts)))
|
(do-one-iteration lsts)))
|
||||||
|
|
||||||
#t)
|
#t)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue