(define (size m)
(cons (length m)
(length (car m))))
(define (size-row m)
(car (size m)))
(define (vector-ref m n)
(cond
((= n 0) (car m))
(else (vector-ref (cdr m) (- n 1)))))
(define (row-vector m n)
(vector-ref m (- n 1)))
(define (display-matrix m)
(let ((r (size-row m)))
(do ((i 1 (+ i 1)))
((> i r))
(begin (display (row-vector m i))
(newline)))))
;------------------------------------------------------
(require (lib "1.ss" "srfi"))
(define (accumulate-l-n op init seqs)
(if (null? (car seqs))
'()
(cons (fold op (map car seqs) init)
(accumulate-l-n op init (map cdr seqs)))))
(define (transpose mat)
(accumulate-l-n cons '() mat))
;------------------------------------------------------
(define M '((1 2 3 4) (5 6 7 8) (9 0 1 2) (3 4 5 6)))
(display-matrix M)
(newline)
(display-matrix (transpose M))