two_d_generic_array.adl
1 program test.alpha { 2 const M_: u32 = 2u32; // Rows in A 3 const K_: u32 = 3u32; // Columns in A / Rows in B 4 const N_: u32 = 2u32; // Columns in B 5 6 transition main() -> [[i32; N_]; M_] { 7 // Matrix A: 2x3 8 let A: [[i32; K_]; M_] = [ 9 [1i32, 2i32, 3i32], 10 [4i32, 5i32, 6i32] 11 ]; 12 13 // Matrix B: 3x2 14 let B: [[i32; N_]; K_] = [ 15 [7i32, 8i32], 16 [9i32, 10i32], 17 [11i32, 12i32] 18 ]; 19 20 // Compute matrix product: C = A * B 21 let C = matmul::[M_, K_, N_](A, B); 22 23 return C; 24 } 25 26 // Multiply two 2D matrices: A[M][K] * B[K][N] = C[M][N] 27 inline matmul::[M: u32, K: u32, N: u32]( 28 A: [[i32; K]; M], 29 B: [[i32; N]; K] 30 ) -> [[i32; N]; M] { 31 let C: [[i32; N]; M] = [[0i32; N]; M]; 32 33 for i in 0u32..M { 34 for j in 0u32..N { 35 let sum = 0i32; 36 for k in 0u32..K { 37 sum += A[i][k] * B[k][j]; 38 } 39 C[i][j] = sum; 40 } 41 } 42 43 return C; 44 } 45 }