| cypress | ||
| src | ||
| .eslintrc.js | ||
| .gitignore | ||
| cypress.json | ||
| index.html | ||
| package-lock.json | ||
| package.json | ||
| README.md | ||
| screenshot.png | ||
| webpack.config.js | ||
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)
The repl has the following syntax (It's work in progress, new capabilities will be added)
-
arithmetic expressions:
- add, subtract, divide, multiply
-
variable declaration eg:
a = 1 -
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 (nis a number) -
method calls:
a = vector(12, 1)> vector@0{x0:1, y0: 2, x:12, y:1}
-
vector(1 2)works as well. The start is now the origin. commas are not mandatory. I'm planning to add a more mathematical notation for vectors:[1 2] -
properties
-
a.type> vector
-
property lookup
a.x+1> 13
-
drag vectors using the mouse pointer. You can change the vector arrows visually
-
lazy evaluation. The difference between
c = a+bandc = "a+b"is that the latter assigns toca 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 a or b. Or try:
a = 2 * aThis updates vectorato twice it's size. And, becausecis defined lazily, it is updated as well!
To run locally
- make sure you have node/npm
- cmdline: npm run start
- and enter
help()
