>469
では、以下のようにしたらそれぞれの関数は末尾再帰ですか?

(define (for-each-pair-1 f g pair r)
 (cond ((null? pair) r)
    ((not (pair? pair)) (g (f pair) r))
    (else
     (for-each-pair-1 f g (cdr pair) (for-each-pair-2 f g (car pair) r)))))

(define (for-each-pair-2 f g pair r)
 (cond ((null? pair) r)
    ((not (pair? pair)) (g (f pair) r))
    (else
     (for-each-pair-2 f g (cdr pair) (for-each-pair-1 f g (car pair) r)))))

なんだか無駄な気がしますが。