SICP問題2.36

全てが同数の要素からなる並びの並びをとる手続き accumulate-n の定義

(define (first-item seqs)
  (if (pair? seqs)
      (cons (car (car seqs)) (first-item (cdr seqs)))
      seqs))
(define (next-item seqs)
  (if (pair? seqs)
      (cons (cdr (car seqs)) (next-item (cdr seqs)))
      seqs))
(define (accumulate-n op init seqs)
  (if (null? (car seqs))
      ()
      (cons (accumulate op init (first-item seqs))
        (accumulate-n op init (next-item seqs)))))

テスト

(define s (list (list 1 2 3) (list 4 5 6) (list 7 8 9) (list 10 11 12)))
; ((1 2 3) (4 5 6) (7 8 9) (10 11 12))
(accumulate-n + 0 s)
; (22 26 30)

一応OKなんだけど、イマイチだなぁ。ということでカンニング

一瞬悩んだけど簡単:一段ずつ計算して cons で繋ぐのだから map car で各要素(リスト)の最初の要素を, map cdr で残りを再帰的に求めれば良い。

(define (accumulate-n op init seqs)
  (if (null? (car seqs))
      ()
      (cons (accumulate op init (map car seqs))
            (accumulate-n op init (map cdr seqs))
            )))
http://sicp.naochan.com/memo.pl?p=%CC%E4%C2%EA2.36

という感じで、確かにそのとおり。
余計な手続きの定義なんていらないということですね。