分类 标签 存档 社区 订阅 搜索

一条 Scheme 转置实现

0 浏览0 评论

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
评论  
留下你的脚步
推荐阅读