AllegroCLでブロック行列乗算を実行する関数を作成しようとしていますが、配列インデックスエラーが発生しています。私はそれが20×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'を使います。 – jkiiski