# Matrix

Not to be confused with Matrix (data structure).

Matrix is a language which is programmed through a system of matrices. It is not two-dimensional and execution is performed through the use of the minimal number of keywords and the principles of matrix algebra.

## Language Overview

There is a single entry point, denoted by "main" which is a matrix of undefined size. From here the elements of main can be anything from a constant double to an arithmetic operation. Doubles are the only data type Matrix accepts. There are few reserved keywords for accepting input and output.

```main   The main entry point
in     Flags an element for input
out    Flags an element for out (default value of 1)
```

The value of out can be manipulated through matrix arithmetic. For example; the following program would print out the numbers 3, 9 and 7.

```main = {
{ print * data }
}

print = [
[out]
]

data = [
[3],
[9],
[7]
]
```

Notice that the matrix "main" with undefined size is encased in curly braces, where the matrices "print" and "data" have a constant size and are encased in square braces. The matrices "print" and "out" are multiplied and main is transformed into a 1x3 matrix with values 3, 9 and 7, all of which are flagged for printing and thus the output will be:

```397
```

The same program could be reproduced using Matrix addition as follows:

```main = { print + data }

print = [out, out, out]

data = [ [2, 8, 6] ]
```

However the values need to be reduced by 1 each in order to produce the same effect.

Execution of the elements of the main Matrix begins when it's final state has been calculated.