; 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)
OyB6ZXJvLXN1bSBzdWItYXJyYXlzCgooaW1wb3J0IChybnJzIGhhc2h0YWJsZXMgKDYpKSkKCihkZWZpbmUgKGFkZDEgeCkgKCsgeCAxKSkKCihkZWZpbmUgKGNvdW50IHhzKQogIChsZXQgKChjb3VudHMgKG1ha2UtZXEtaGFzaHRhYmxlKSkKICAgICAgICAoc3VtIDApIChyZXN1bHQgMCkpCiAgICAoZG8gKCh4cyB4cyAoY2RyIHhzKSkpICgobnVsbD8geHMpIHJlc3VsdCkKICAgICAgKHNldCEgc3VtICgrIHN1bSAoY2FyIHhzKSkpCiAgICAgICh3aGVuIChoYXNodGFibGUtY29udGFpbnM/IGNvdW50cyBzdW0pCiAgICAgICAgKHNldCEgcmVzdWx0ICgrIHJlc3VsdCAoaGFzaHRhYmxlLXJlZiBjb3VudHMgc3VtIDApKSkpCiAgICAgIChoYXNodGFibGUtdXBkYXRlISBjb3VudHMgc3VtIGFkZDEgMSkpKSkKCihkaXNwbGF5IChjb3VudCAnKC0xIDEgLTEgMSkpKSAobmV3bGluZSk=