On Wed 22 May 2013 22:44, l...@gnu.org (Ludovic Courtès) writes: >> -(define (fold2 proc ls s0 s1) >> - (let lp ((ls ls) (s0 s0) (s1 s1)) >> - (if (null? ls) >> - (values s0 s1) >> - (receive (s0 s1) (proc (car ls) s0 s1) >> - (lp (cdr ls) s0 s1))))) >> - >> (define (fold4 proc ls s0 s1 s2 s3) >> (let lp ((ls ls) (s0 s0) (s1 s1) (s2 s2) (s3 s3)) >> (if (null? ls) >> @@ -236,15 +231,9 @@ >> (receive (s0 s1 s2 s3) (proc (car ls) s0 s1 s2 s3) >> (lp (cdr ls) s0 s1 s2 s3))))) >> >> -(define (fold5 proc ls s0 s1 s2 s3 s4) >> - (let lp ((ls ls) (s0 s0) (s1 s1) (s2 s2) (s3 s3) (s4 s4)) >> - (if (null? ls) >> - (values s0 s1 s2 s3 s4) >> - (receive (s0 s1 s2 s3 s4) (proc (car ls) s0 s1 s2 s3 s4) >> - (lp (cdr ls) s0 s1 s2 s3 s4))))) > > What about moving these to a helper module eventually?
Sure. Or maybe a fold-values that takes a variable number of arguments and inlines itself... (define-syntax fold-values (lambda (x) (syntax-case x () ((_ proc list seed ...) (with-syntax (((s ...) (generate-temporaries #'(seed ...)))) #'(let ((p proc)) (let lp ((l list) (s seed) ...) (match l (() (values s ...)) ((elt . l) (call-with-values (lambda () (p elt s ...)) (lambda (s ...) (lp l s ...)))))))))))) I'll do that :) A -- http://wingolog.org/