Skip to content
It doesn't matter: A toy implementation of an APL-like interpreter
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
.gitignore
LICENSE
README.md
idm.go
operations.go
parser.go
parser_test.go
scanner.go
scanner_test.go
token.go
value.go

README.md

idm

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.

can do:

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...
...
...

Ressources

You can’t perform that action at this time.