1
我想創建一個函數,在AllegroCL中執行阻塞矩陣乘法,但我不斷收到數組索引錯誤。我相信這是由於20×20塊矩陣的邊界爲0-19,但我不確定如何解決它。阻止矩陣乘法
錯誤:在訪問 #時數組索引20對於維數20來說太大。 [condition type:type-error]
任何幫助或方向是非常感謝。以下是我的代碼到目前爲止。
(defun bmmul (A B)
(let* ((m (car (array-dimensions A)))
(n (cadr (array-dimensions A)))
(l (cadr (array-dimensions B)))
(u 0)
(C (make-array `(,m ,l) :initial-element 0)))
(loop for p from 0 to (- m n) do
(loop for i from (+ 0 1) to n do
(setf u (aref C i 0))
(loop for k from p to (- (+ p n) 1) do
(setf u (* (aref A i k) (aref B k 0))))
(setf (aref C i 0) u)))
C))
在'LOOP'中,'to n'是包含性的。如果您想排除'n',請改用'below n'。 – jkiiski