我正在尝试编写一个函数,它接受一个操作和一个矩阵将矩阵转换为一个向量。例如,如果我调用(matrix-to-vector + ((1 2 3 4) (5 6 7 8)))
,它将返回来自(6 8 10 12)
的{{1}}。矩阵输入是NxM矩阵,操作是两个参数运算符(如+ - * /或字符串) -附加)。它使用运算符将矩阵中每列的元素组合在一起,从而返回一个大小为M的向量。我有一个感觉图在这里会有所帮助,但我不知道如何实现它。我将操作映射到矩阵列中的每个元素以获得结果向量。
答案 0 :(得分:0)
map
可以解决问题。唯一要考虑的是你应该使用apply
,因为输入是一个列表列表:
(define (matrix-to-vector op lst)
(apply map op lst))
例如:
(matrix-to-vector + '((1 2 3 4) (5 6 7 8)))
=> '(6 8 10 12)
答案 1 :(得分:0)
如果分离构成矩阵的列表,也可以以更简单的方式使用'map'
:
(map + '(1 2 3 4) '(5 6 7 8))
输出:
'(6 8 10 12)
对于N * M矩阵,它也可以使用2个以上的列表:
(map + '(1 2 3 4) '(5 6 7 8) '(10 20 30 40))
输出:
'(16 28 40 52)