; zero-sum sub-arrays

(import (rnrs hashtables (6)))

(define (add1 x) (+ x 1))

(define (count xs)
  (let ((counts (make-eq-hashtable))
        (sum 0) (result 0))
    (do ((xs xs (cdr xs))) ((null? xs) result)
      (set! sum (+ sum (car xs)))
      (when (hashtable-contains? counts sum)
        (set! result (+ result (hashtable-ref counts sum 0))))
      (hashtable-update! counts sum add1 1))))

(display (count '(-1 1 -1 1))) (newline)