t3x.org / sketchy / library / fold-right.html
SketchyLISP
Reference
  Copyright (C) 2007
Nils M Holm

fold-right

Conformance: R5.91RS Scheme

Purpose: Iterate over lists right-associatively. Combine the list of last members of the given lists with the base element b. Combine the result with the list of second-to-last members, etc. When the given lists are empty, return the base element.
All lists passed to fold-right must have the same length.

Arguments:
F - function to apply
B - base element
A* ... - lists

Implementation:

(define (fold-right f b . a*)
  (letrec
    ((carof
       (lambda (a)
         (map-car car a)))
     (cdrof
       (lambda (a)
         (map-car cdr a)))
     (foldr
       (lambda (a* r)
         (cond ((null? (car a*)) r)
           (else (foldr (cdrof a*)
                   (apply f (append (carof a*) (list r)))))))))
    (cond ((null? a*)
        (bottom '(too few arguments to fold-right)))
      ((null? (car a*)) b)
      (else (foldr (map reverse a*) b)))))

Example:

:l lib/list.scm
(fold-right list '9 '(a b c) '(d e f)) 
=> (a d (b e (c f 9)))

See also:
fold-left, map, member, list?.