; two list tasks

(define (sum xs) (apply + xs))
(define xss '((1 2 3 4) (2 3 4 5) (3 4 5 6)))
(display (map sum (apply map list xss))) (newline)

(define (split n xs)
  (let loop ((n n) (xs xs) (zs '()))
    (if (or (zero? n) (null? xs))
        (values (reverse zs) xs)
        (loop (- n 1) (cdr xs) (cons (car xs) zs)))))

(define xs '(1 2 3 4 2 3 4 5 3 4 5 6))
(define (splits n xs)
  (let loop ((xs xs) (zs (list)))
    (if (null? xs) (reverse zs)
      (call-with-values
        (lambda () (split n xs))
        (lambda (first rest)
          (loop rest (cons first zs)))))))
(display (map sum (splits 4 xs))) (newline)