(define (chunk lis pred) (let loop ((lis lis) (acc '()) (chunk '())) (if (not (null? lis)) (let ((item (car lis))) (if (pred item) (loop (cdr lis) acc (append chunk (list item))) (if (null? chunk) (loop (cdr lis) acc (list item)) (loop lis (append acc (list chunk)) '())))) (append acc (list chunk))))) (chunk '(1 0 0 2 3 4 0 0) zero?) ;=> ((1 0 0) (2) (3) (4 0 0))