matrix 是列表的列表,先假设每个列表都是等长的,例如它是 '((1 2) (3 4) (5 6))
。把它视作一个二维矩阵,matrix 中每个元素自上而下对应矩阵的一行,而每个元素作为一个列表中的元素,自左而右的表示矩阵行中的元素。所以上述的例子对应的矩阵是:
\begin{pmatrix}
1 & 2\\
3 & 4\\
5 & 6\\
\end{pmatrix}
我们的程序需要转置这个矩阵,也就是变成 '((1 3 5) (2 4 6))
。我完成了一个朴素的实现,它迭代了两层循环。但我发现了这样的实现:
(define (transpose matrix)
(if (null? matrix)
'()
(apply map (lambda x x) matrix)))
只可意会不可言传。
Ph'nglui mglw'nafh Cthulhu R'lyeh wgah'nagl fhtagn