【发布时间】:2017-07-25 13:46:47
【问题描述】:
我正在尝试在 AllegroCL 中创建一个执行阻塞矩阵乘法的函数,但我不断收到数组索引错误。我相信这是由于 20 x 20 块矩阵的一侧的指标为 0-19,但我不确定如何修复它。
错误:访问时数组索引 20 对于维度 20 来说太大了 #. [条件类型:类型错误]
非常感谢任何帮助或指导。以下是我目前的代码。
(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。
标签: matrix lisp common-lisp matrix-multiplication