;; sum-of-prefixes ; (2 1 9 17 0) -> (2 3 12 29 29) ; (1 1 1 1 1) -> (1 2 3 4 5) ; letrec (define sum-of-prefixes (lambda (tup) (letrec ((f (lambda (t p) (if (null? t) '() (let ((v (+ (car t) p))) (cons v (f (cdr t) v))))))) (f tup 0)))) ; fold (define sum-of-prefixes (lambda (tup) (reverse (fold (lambda (e r) (cons (+ e (if (null? r) 0 (car r))) r)) '() tup)))) ; pair-fold (use srfi-1) (define sum-of-prefixes (lambda (tup) (reverse (pair-fold (lambda (rest ret) (cons (+ (car rest) (if (null? ret) 0 (car ret))) ret)) '() tup)))) (define sum-of-prefixes-b (lambda (sonssf tup) (if (null? tup) '() (let ((a (+ sonssf (car tup)))) (cons a (sum-of-prefixes-b a (cdr tup))))))) (define sum-of-prefixes (lambda (tup) (sum-of-prefixes-b 0 tup))) (sum-of-prefixes '(2 1 9 17 0)) ; -> (2 3 12 29 29) (sum-of-prefixes '(1 1 1 1 1)) ; -> (1 2 3 4 5)