Althought matrix is just multi-list in scheme, the methods for processing matrics is highly distinguished from that for normal lists.
To transpose a given matrix
Help functions code
;;find-n-core : list-of-number number number -> number
;;to find the n'th element of the list; where c is a counter
(define (find-n-core lt n c)
(cond
[(= n c) (first lt)]
[else
(find-n-core (rest lt) n (+ c 1))]))
;;find-n : list-of-number number number -> number
;;to find the n'th element of the list
(define (find-n lt n)
(find-n-core lt n 1))
;;gen-row : matrix number -> list-of-number
;;to generate the n'th row of new matrix
(define (gen-row matrix n)
(cond
[(empty? matrix) empty]
[else
(cons
(find-n (first matrix) n)
(gen-row (rest matrix) n))]))
;;transpose-core : matrix number number -> matrix
;;the core which generate the new matrix; where l is the length of
;;every element list in old matrix and i is a counter
(define (transpose-core matrix l i)
(cond
[(> i l) empty]
[else
(cons
(gen-row matrix i)
(transpose-core matrix l (add1 i)))]))
;;transpose : matrix -> matrix
;;to generate the transpose of matrix
;;example : (transpose (list (list 1) (list 2) (list 3))) => (list (list 1 2 3))
(define (transpose mat)
(transpose-core
mat
(length (first mat))
1))