(use srfi-1)
(use srfi-8)
(use gauche.collection)

(define (scanl proc seed ls)
  (reverse
   (fold2 (lambda (ele acc-l acc-n)
            (let1 n (proc ele acc-n)
              (values (cons n acc-l) n)))
          (cons seed '()) seed ls)))

(scanl + 0 '())
;; (0)
(scanl + 0 '(1))
;; (0 1)
(scanl + 0 '(1 2))
;; (0 1 3)
(scanl + 0 (iota 10 1))
;; (0 1 3 6 10 15 21 28 36 45 55)