bug fix in xrange() that would cause it to yield bogus values
[vox.git] / examples / matrix.vx
blobbc6e629e57564e49e4bf446463b640841dd74e92
1 /*\r
2 *\r
3 * Original Javascript version by David Hedbor(http://www.bagley.org/~doug/shootout/)\r
4 *\r
5 */\r
6 local SIZE=30;\r
7 \r
8 function mkrawmatrix(rows, cols, setfunc)\r
9 {\r
10     local i, j, ret\r
11     local count = 1;\r
12     local m = []\r
13     m.resize(rows)\r
14     for (i = 0; i < rows; i+=1)\r
15     {\r
16         m[i] = [];\r
17         m[i].resize(cols)\r
18         for (j = 0; j < cols; j+=1)\r
19         {\r
20             ret = setfunc(i, j, count);\r
21             count = ret[0]\r
22             m[i][j] = ret[1]\r
23         }\r
24     }\r
25     return m;\r
26 }\r
28 function mkmatrix(rows, cols)\r
29 {\r
30     return mkrawmatrix(rows, cols, function(i, j, count)\r
31     {\r
32         count += 1;\r
33         return [count, count+1];\r
34     })\r
35 }\r
37 function mmult(rows, cols,  m1, m2, m3)\r
38 {\r
39     local i, j, k, val;\r
40     for (i = 0; i < rows; i+=1)\r
41     {\r
42         for (j = 0; j < cols; j+=1)\r
43         {\r
44             val = 0;\r
45             for (k = 0; k < cols; k+=1)\r
46             {\r
47                 val += m1[i][k] * m2[k][j];\r
48             }\r
49             m3[i][j] = val;\r
50         }\r
51     }\r
52     return m3;\r
53 }\r
55 local n = vargv.len()!=0?vargv[0].tointeger():1\r
57 local m1 = mkmatrix(SIZE, SIZE);\r
58 local m2 = mkmatrix(SIZE, SIZE);\r
59 local mm = mkmatrix(SIZE, SIZE);\r
61 for (local i = 0; i < n; i+=1) {\r
62   mmult(SIZE, SIZE, m1, m2, mm);\r
63 }\r
65 println(\r
66     "[0][0] = " + mm[0][0] + "\n" +\r
67     "[2][3] = " + mm[2][3] + "\n" +\r
68     "[3][2] = " + mm[3][2] + "\n" +\r
69     "[4][4] = " + mm[4][4]\r
70 );\r