LOCAL ARRAY a[4,2], b[2,3], c[4,3] CLOSE DATABASES ALL *!* The arrays could be created directly but I prefer to do this: CREATE CURSOR mat1 (c1 I, c2 I) CREATE CURSOR mat2 (c1 I, c2 I, c3 I) *!* Since matrix multiplication of integer arrays *!* involves only multiplication and addition, *!* the result will contain integers CREATE CURSOR result (c1 I, c2 I, c3 I) INSERT INTO mat1 VALUES (1, 2) INSERT INTO mat1 VALUES (3, 4) INSERT INTO mat1 VALUES (5, 6) INSERT INTO mat1 VALUES (7, 8) SELECT * FROM mat1 INTO ARRAY a INSERT INTO mat2 VALUES (1, 2, 3) INSERT INTO mat2 VALUES (4, 5, 6) SELECT * FROM mat2 INTO ARRAY b STORE 0 TO c MatMult(@a,@b,@c) SELECT result APPEND FROM ARRAY c BROWSE PROCEDURE MatMult(aa, bb, cc) LOCAL n As Integer, m As Integer, p As Integer, i As Integer, j As Integer, k As Integer IF ALEN(aa,2) = ALEN(bb,1) n = ALEN(aa,2) m = ALEN(aa,1) p = ALEN(bb,2) FOR i = 1 TO m FOR j = 1 TO p FOR k = 1 TO n cc[i,j] = cc[i,j] + aa[i,k]*bb[k,j] ENDFOR ENDFOR ENDFOR ELSE ? "Invalid dimensions" ENDIF ENDPROC