Math&Matrix
- This is still a work in progress. It may be changed in the future.
Math&Matrix is a language based on a matrices list. Each matrix in this list is an instruction based on math properties (determinant, invertibility, diagonal/triangle equivalant, ...) This language is stack-based
Syntax
A matrix is represented with the following syntax:
*n #,#,#,...,# #,#,#,...,# ... #,#,#,...,# ;
where # and n is an integer number.
Each line begin with a number must have the same number of integer (otherwise, it return an error)
*n
represent a division coefficient. Each number in this matrix are divide by n. It is the only way to make a float
if n = 1, this line is optional
;;
end the program
So, a Math&Matrix program looks like this:
1,2,3 4,5,6 7,8,9 ; *3 5,10,9,13 0,2,24,11 22,30,1,1 0,7,17,21 ; 1,1,4,9 21,43,78,0 0,5,0,67 465,7483,7878,23 ; ;;
Instructions
+, -, *, /, %, ^
: pop 2 values a and b and push a op b
push A
: push A into the stack
copy
: duplicate the top value and push it into the stack
swap i, j
: pop 2 values i and j and swap the position of the i-th and the j-th element
del
: discard the top value
instr
: input a char and push the ASCII code into the stack
outstr
: pop the top value and print the char which correspond to the ASCII code
inint
: input an integer and push it into the stack
outint
: pop the top value and print it
if C, n
: pop 2 values a and b. If a C b then continue, else skip the next n instruction(s)
for n
: pop a value A. Execute the next n instruction(s) A time(s)
while C, n
: Execute the next n instructions while a C b is true. It pop 2 values at the beginning of the loop. The loop stop if the stack contain less than 2 values.
stop
: stop the program
Matrix form
+, -, *, /, %, ^
: all 2x2 matrix where opcode = det % 6
0 | 1 | 2 | 3 | 4 | 5 | |
---|---|---|---|---|---|---|
opcode | + | - | * | / | % | ^ |
push A
: all non-square matrices (except 2x3)
where l and c are the number of line and column in the matrix
copy
: 1 rank 2x3 matrix
del
: 2 rank 2x3 matrix
swap i, j
: (not implemented yet)
instr, inint
: 4x4 orthogonal matrix
outstr, outint
: 4x4 non orthogonal matrix
while
: 3x3 matrix where the diagonal matrix equivalent have this form :
0 | 1 | 2 | 3 | 4 | 5 | |
---|---|---|---|---|---|---|
C | < | > | <= | >= | == | != |
for
: 3x3 matrix where the triangle matrix equivalent have this form :