; split an array

(define (sum xs) (apply + xs))

(define (split-equal xs)
  (let ((n (sum xs)))
    (if (odd? n) #f
      (let loop ((xs xs) (n (/ n 2)) (ys (list)))
        (cond ((null? xs) #f)
              ((zero? n) (values (reverse ys) xs))
              ((negative? n) #f)
              (else (loop (cdr xs) (- n (car xs)) (cons (car xs) ys))))))))

(call-with-values
	(lambda () (split-equal '(1 2 3 4 5 6 21)))
	(lambda (front back) (display front) (newline) (display back) (newline)))
(newline)

(call-with-values
	(lambda () (split-equal '(1 90 50 30 5 3 2 1)))
	(lambda (front back) (display front) (newline) (display back) (newline)))
(newline)

(display (split-equal '(50 100 1000))) (newline)