我正在尝试在学校作业的方案中编写矩阵乘法函数,但我不允许使用我们尚未讨论过的函数,例如map和lambda(在定义函数参数之外)。我已经编写了一个函数,可以将一个向量乘以一个矩阵和一个可以取两个向量的点积的函数。为简单起见,我可以假设输入有效。
因此,该函数将两个矩阵作为参数。我知道行向量将是第一个矩阵的元素,但我如何得到第二个矩阵的列?
这是我的矢量乘法函数:
(define vectormult
(lambda (vec mat)
(cond
((null? mat) vec)
(else (cons (dotproduct vec (car mat)) (vectormult vec (cdr mat)))))))
这是我的点积函数:
(define dotproduct
(lambda(l1 l2)
(cond
((null? l1) 0)
((null? l2) 0)
(else (+ (* (car l1) (car l2)) (dotproduct (cdr l1) (cdr l2)))))))
那么如何使用递归迭代两个矩阵?
答案 0 :(得分:0)
我实际想出来了。首先,我的vectormult函数将向量乘以错误的顺序。我需要辅助函数来提取正确的列以乘以向量。我的最终代码调用了vectormult并在第一个矩阵的cdr上进行递归。
(define matrixmultiply
(lambda (m1 m2)
(cond
((null? m2) '())
((null? (car m2)) '())
(else (vectormult (car m1) m2) (matrixmultiply (cdr m1) m2)))))