idm (it doesn't matter) is a toy implementation of an APL interpreter.
I want to build a toy implementation on an APL-like interpreter. I got this idea after watching this video from Rob Pike.
numbers
./idm
1
1
-1
-1
- 1
SYNTAX ERROR
1 + 1
2
-1 + 1
0
1 - 1
0
1 + 2 + 3 - 10
-4
1 + -1
0
7 ** 3
343
7 max 3
3
7 min 3
3
variables
a = 2
2
a
2
a + 1
3
1 + a
3
a + a + a + a
8
b = 1
1
a + b
3
a = b
1
a + b + 10
12
vectors
1 2 3 4
1 2 3 4
1 2 3 4 + 1 2 3 4
2 4 6 8
1 2 3 4 - 1 2 3 4
0 0 0 0
1 -1
1 -1
-1 -1 -1 + 1 1 1
0 0 0
1 2 3 4 * 1 2 3 4
1 4 9 16
1 2 3 4 ** 2 2 2 2
1 4 9 16
1 2 3 4 max 3 4 1 5
3 4 3 5
1 2 3 4 min 3 4 1 5
1 2 1 4
+/ 1 2 3
6
+\ 1 2 3
1 3 6
*/ 1 2 3
6
*\ 1 2 3
1 2 6
##todo:
./idm
2 ** -1
0.25
a = 1 2 3 4
1 2 3 4
1 1 0 1 and 1 0 1 1
1 0 0 1
1 1 0 1 or 1 0 1 1
1 1 1 1
iota 5
1 2 3 4 5
y = 2 x iota 5
2 4 6 8 10
or/ 1 0 1 1
1
and/ 1 0 0 0
0
max/ 1 2 4 2
4
min/ 1 2 4 3
0
y[2]
6
dim y
5
y[:2]
2 4
y[2:]
6 8 10
y[-1]
10
y[-2:]
2 4 6
3 shape 1
1 1 1
m = 5 5 shape 1
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
m + m
2 2 2 2 2
2 2 2 2 2
2 2 2 2 2
2 2 2 2 2
2 2 2 2 2
dim m
5 5
functions...
...
...