MatRepl
- is a Matrix
- and a repl: Read–Eval–Print Loop, where Print is doing operations on vectors and matrices in a graphic environment
- written in vanilla javascript (ES6)
- see live at https://matrepl.net
The repl has the following syntax (It's work in progress, new capabilities will be added)
-
arithmetic expressions:
- add(+), subtract(-), divide(/), multiply(*) on scalars, vectors and matrices.
-
variable declaration eg:
a = 1 + 2
-
remove(x)
removes bindings (when it's an object (eg vector), removes it from the matrix) -
remove(@n)
removes an object using it's assigned index (n
is a number)- By the way, values can be bound to a name (assigned to a variable), but you can always also refer to them using their id, using :
@n
- so
a = vector(1,1)
> vector@0{x0:0, y0: 1, x:1, y:1}
- and then
@0
> vector@0{x0:0, y0: 1, x:1, y:1}
- By the way, values can be bound to a name (assigned to a variable), but you can always also refer to them using their id, using :
-
method calls:
a = vector(12, 1)
works as well. The start is now the origin.> vector@0{x0:0, y0: 2, x:12, y:1}
vector(-1 -1)
!=vector(-1-1)
and the latter would meanvector(-2)
which is not legal. -
arrays: [i0, i1, i2, ... in] creates an array.
- [i0, i1] is special: it is a shorthand for creating a 2-dimensional vector. I'll have to think of another way to create an array of length 2...
-
```id()`` adds a 2d identity matrix, which is also the two basis vectors.
-
properties
a = [1,2]
a.type
> vector
a.x+1
> 13
-
drag vectors using the mouse pointer. You can change the vector arrows visually
-
lazy evaluation. The difference between
c = a+b
andc = "a+b"
is that the latter assigns toc
a parsed expression that can always be evaluated later. When you apply lazy evaluation and later updatea
, the value for c will be reevaluated automatically. Combined with vector dragging, this way you can get an intuition for vector addition. Want to do the same for matrix multiplication and basis change. -
Example: enter the following, like in the screenshot:
a = vector(0.5, 0.5) b = vector(-1, 1) c = "a + b"
-
and press enter. Then using the mouse pointer move vector
a
orb
. Or try:a = 2 * a
This updates vectora
to twice it's size. And, becausec
is defined lazily, it is updated as well!
To run locally
- make sure you have node/npm
- cmdline: npm run start
- and enter
help()