旋转矩阵的一种方法是对其进行转置,然后反转所有行。我用两个函数解决了这个问题,map(返回转置)和 reverse(完成 90° 旋转),在控制台中我执行以下操作:
(reverse (apply map list (list (list 1 2 3 4) (list 5 6 7 8) (list 9 10 11 12) (list 13 14 15 16)))
Result: {{4 8 12 16} {3 7 11 15} {2 6 10 14} {1 5 9 13}}
没错,但是当我创建一个函数时,它不起作用。
(define (transpose2 matriz)
(reverse (apply map list matriz))
然后做:
> (transpose2 (list (list 1 2 3 4) (list 5 6 7 8) (list 9 10 11 12) (list 13 14 15) ) )
它只是抛出一个错误:
mcar:预期违反合同:mpair?给定:()
我试过导入 (srfi :41) (我也在 r6rs 上工作)但它也不起作用。不过,此函数适用于 3 x 3 矩阵。
我怎样才能解决这个问题?