我一直在尝试编写返回矩阵转置的函数.所以输出的例子就是,(transpose (list '(1 2) '(4 5))) ;==> ((1 4) (2 5)) 这是我的功能:
(define transpose
(lambda (m1)
(if (null? (cadr m1))
null
(list (indiv (car m1) (cadr m1)) (transpose (rest m1))))))
(define indiv
(lambda (l1 l2)
(if (empty? l1)
null
(list (list (car l1) (car l2)) (indiv (rest l1) (rest l2))))))
Run Code Online (Sandbox Code Playgroud)
indiv函数负责行递归,而transpose调用indiv函数来获取转置.我的问题是为什么不能 (if (null? (cadr m1))检查我是否到达了矩阵的最后一行?有没有办法在计划中检查这个?我不想用另一种方法来解决这个问题,我只是想知道这是否可行,如果是,那么如何?