Skip to content

Latest commit

 

History

History
3471 lines (2494 loc) · 38.2 KB

File metadata and controls

3471 lines (2494 loc) · 38.2 KB

Test results

Generated by apl_test from apl/primitives/gen.go on 2019-03-10 13:49:24

Basic numbers and arithmetics

	1
1

	1b
1

	1+1
2

	1-2
¯1

	¯1
¯1

	1-¯2
3

	1a90
0J1

	1a60+1a300
1J0

	1J1
1J1

Vectors

	1 2 3
1 2 3

	1+1 2 3
2 3 4

	1 2 3+¯1
0 1 2

	1 2 3+4 5 6
5 7 9

Braces

→apl/parse.go

	1 2+3 4
4 6

	(1 2)+3 4
4 6

	1×2+3×4
14

	1×(2+3)×4
20

	(3×2)+3×4
18

	3×2+3×4
42

Comparison

→apl/primitives/compare.go

	1 2 3 4 5 > 2
0 0 1 1 1

	1 2 3 4 5  3
0 0 1 1 1

	2 4 6 8 10<6
1 1 0 0 0

	2 4 6 8 106
1 1 1 0 0

	1 2 3  1.1 2 3
1 0 0

	3=3.1 3 ¯2 ¯3 3J0
0 1 0 0 1

	2+2=2
3

	2×1 2 3=4 2 1
0 2 0

	-3<4
¯1

	-1 2 3=0 2 3
0 ¯1 ¯1

 TODO Comparison tolerance is not implemented.

Boolean, logical

→apl/primitives/boolean.go

	0 1 0 1 ^ 0 0 1 1
0 0 0 1

	0 1 0 1  0 0 1 1
0 0 0 1

	0^0 0 1 1
0 0 0 0

	0 0 1 10 1 0 1
0 1 1 1

	10 1 0 1
1 1 1 1

	0 0 1 10 1 0 1
1 0 0 0

	0 0 1 10 1 0 1
1 1 1 0

	~0
1

	~1.0
0

	~0 1
1 0

Least common multiple, greatest common divisor

→apl/primitives/boolean.go

	30^36
180

	0^3
0

	3^0
0

	15 1 2 7 ^ 35 1 4 0
105 1 4 0

	3036
6

	15 1 2 7  35 1 4 0
5 1 2 7

	03
3

	30
3

	3^3.6
18

	33.6
0.6

 TODO: lcm and gcm of float and complex

Multiple expressions

→apl/parse.go

	123
1
2
3

	12
1
2

	1 23 4
1 2
3 4

	X3  Y4

Index origin, print precision

→apl/var.go

	⎕IO0  3
0 1 2

	⎕IO
1

	⎕IO0  ⎕IO
0

	⎕PP1  ⎕PP
1

	⎕PP0  1.23456789
1.23457

	⎕PP¯1  1.23456789
1.23456789

	⎕PP1  1.23456789
1

	⎕PP3  1.23456789
1.23

Type, typeof

→apl/primitives/type.go

	'a'
apl.String

Bracket indexing

→apl/primitives/index.go

	A6  A[1]
1

	A2 36  A[1;]  A[1;]
1 2 3
3

	A2 36  A[2;3]
6

	A2 36  A[2;2 3]
5 6

	A2 36  ⍴⍴A[2;3]
0

	A2 3 4  A[]
2 3 4

	⎕IO0  A2 36  A[1;2]
5

	5 6 7[2+1]
7

	(2×3)[2]
4

	A2 3 6A[A[1;1]+1;]
4 5 6

	A1 2 3A[3]+1
4

	A1 2 31+A[3]
4

Scalar primitives with axis

→apl/primitives/array.go

	(2 36)+[2]1 2 3
2 4 6
5 7 9

	1 2 3 +[2] 2 36
2 4 6
5 7 9

	K2 3.1×6J2 3 424NJ+[1 2]KNN[1;2;3]N[2;3;4]
2 3 4
7.2
24.6

Iota

→apl/primitives/iota.go

	5
1 2 3 4 5

	0

Rho, reshape

→apl/primitives/rho.go

	5
5

	5


	⍴⍴5
0

	0
0

	⍴⍴0
1

	2 31
1 1 1
1 1 1

	30
0 0 0

	0 20
0 2

	3 00
3 0

	3 03
3 0

	'a'
Must fail: strings are not in the input domain of 

Where, interval index

→apl/primitives/iota.go

	1 0 1 0 0 0 0 1 0
1 3 8

	'e'='Pete'
2 4

	1=1
1

	10 20 3011 1 31 21
1 0 3 2

	'AEIOU''DYALOG'
1 5 1 3 4 2

	0.8 2 3.31.3 1.9 0.7 4 .6 3.2
1 1 0 3 0 2

Membership

→apl/primitives/iota.go

	'BANANA''AN'
0 1 1 1 1 1

	5 1 26 5 4 1 9
1 1 0

	(2 38 3 5 8 4 8)1 8 9 3
1 1 0
1 0 1

	8 9 7 30
0 0 0 0

	3.1 5.1 7.12 21.1 3.1 5.1 4.1
1 1 0

	19'CLUB'
0

	'BE''BOF'
1 0

	'NADA'0
0 0 0 0

	(/0)/0
0

	5 10 1510
1 1 0

Without

→apl/primitives/boolean.go

	1 2 3 4 5~2 3 4
1 5

	'RHYME'~'MYTH'
R E

	1 2~0
1 2

	1~3
1

	3~3


	0~1 2
0

	5 10 15~10
15

	3 1 4 1 5 5~3 1 4 1 5 5~4 2 5 2 6
4 5 5

Unique, union

→apl/primitives/unique.go

	3
3

	3
1

	 22 10 22 22 21 10 5 10
22 10 21 5

	2 7 1 8 2 8 1 8 2 8 4 5 9 0 4 4 9
2 7 1 8 4 5 9 0

	'MISSISSIPPI'
M I S P

	0
0

	0


	33
3

	33
1

	30
3

	(0)3
3

	(0)0
0

	1 2 35 3 2 1 4
1 2 3 5 4

	5 6 71 2 3
5 6 7 1 2 3

Find

→apl/primitives/find.go

	'AN''BANANA'
0 1 0 1 0 0

	'ANA''BANANA'
0 1 0 1 0 0

	(2 21)1 2 3
0 0 0

	(2 25 6 8 9)3 39
0 0 0
0 1 0
0 0 0

	4 5 63 39
0 0 0
1 0 0
0 0 0

Magnitude, Residue, Ceil, Floor, Min, Max

→apl/primitives/elementary.go

	|1 ¯2 ¯3.2 2.2a20
1 2 3.2 2.2

	3 3 ¯3 ¯3|¯5 5 ¯4 4
1 2 ¯1 ¯2

	0.5|3.12 ¯1 ¯0.6
0.12 0 0.4

	¯1 0 1|¯5.25 0 2.41
¯0.25 0 0.41

	1j2|2j3 3j4 5j6
1J1 ¯1J1 0J1

	4J6|7J10
3J4

	¯10 7J10 .3|17 5 10
¯3 ¯5J7 0.1

	¯2.3 0.1 100 3.3
¯3 0 100 3

	0.5 + 0.4 0.5 0.6
0 1 1

	1j3.2 3.3j2.5 ¯3.3j¯2.5
1J3 3J2 ¯3J¯3

	1.5J2.5
2J2

	1J2 1.2J2.5 ¯1.2J¯2.5
1J2 1J2 ¯1J¯3

	¯2.7 3 .5
¯2 3 1

	1.5J2.5
1J3

	1J2 1.2J2.5 ¯1.2J¯2.5
1J2 1J3 ¯1J¯2

	¯2.3 0.1 100 3.3
¯2 1 100 4

	1.2j2.5 1.2j¯2.5
1J3 1J¯2

	54 5 7
4 5 5

	¯2¯3
¯3

	3.3 0 ¯6.73.1 ¯4 ¯5
3.1 ¯4 ¯6.7

	¯2.1 0.1 15.3  ¯3.2 1 22
¯3.2 0.1 15.3

	54 5 7
5 5 7

	¯2¯3
¯2

	3.3 0 ¯6.73.1 ¯4 ¯5
3.3 0 ¯5

	¯2.01 0.1 15.3  ¯3.2 ¯1.1 22.7
¯2.01 0.1 22.7

Factorial, gamma, binomial

→apl/primitives/elementary.go

	!4
24

	!1 2 3 4 5
1 2 6 24 120

	!3J2
¯3.01154J1.77017

	!.5 ¯.05
0.886227 1.03145

	2!5
10

	3.2!5.2
10.92

	3!¯2
¯4

	¯6!¯3
¯10

	2 3 4!6 18 24
15 816 10626

	3!.05 2.5 ¯3.6
0.0154375 0.3125 ¯15.456

	0 1 2 3!3
1 3 3 1

	2!3J2
1J5

Match, Not match, tally, depth

→apl/primitives/match.go

	5
0

	0
1

	(1;2;3;)
1

	(1;(2;3;);)
2

	(1;(2;(1;2;);3;);)
3

	"alpha"
0

	2 3 410
2

	2
1

	0
0

	1 2 31 2 3
1

	313
0

	""0
0

	''0
1

	2.0-1.01>0
1

	12
1

	11
0

	313
1

	""0
1

Left tack, right tack

→apl/primitives/tack.go

	1 2 3
1 2 3

	3 2 11 2 3
3 2 1

	1 2 33 2 1
3 2 1

	4
4

	/1 2 3
1

	/1 2 3
3

	/2 36
1 4

	/2 36
3 6

Array expressions

→apl/primitives/array.go

	-3
¯1 ¯2 ¯3

Ravel, enlist, catenate, join

→apl/primitives/comma.go

	,2 36
1 2 3 4 5 6

	,3
1

	,0
0

	1 2 3,4 5 6
1 2 3 4 5 6

	"abc",1 2
abc 1 2

	(2 36),2 27 8 9 10
1 2 3 7  8
4 5 6 9 10

	2 32,3
1

	(1 2 3,4 5 6)6
1

	0,2 31
0 1 1 1
0 1 1 1

	0,[1]2 36
0 0 0
1 2 3
4 5 6

	(2 36),[1]0
1 2 3
4 5 6
0 0 0

	(2 36),[1]5 4 3
1 2 3
4 5 6
5 4 3

	(3 515),[1]3 3 5-45
4 3 5

	(3 515),[2]3 3 5-45
3 4 5

Ravel with axis

→apl/primitives/comma.go

	,[0.5]1 2 3
1 2 3

	,[0.5]1 2 3
1 3

	,[1.5]1 2 3
1
2
3

	,[1.5]1 2 3
3 1

	A3 412,[0.5]A
1 3 4

	A3 412,[1.5]A
3 1 4

	A3 412,[2.5]A
3 4 1

	A2 36,[.1]A
1 2 3

	A2 36,[1.1]A
2 1 3

	A2 36,[2.1]A
2 3 1

	,[1.1]5 6 7
5
6
7

	A2 3 424A,[1 2]AAA[5;3]
6 4
19

	A2 3 424,[2 3]A
2 12

	A3 2 424,[2 3]A
3 8

	A3 2 424,[1 2]A
6 4

	,[0]1 2 3
3 1

	,[0]2 36
2 3 1

	A3 2 530,[⍴⍴A],[.5]A
6 5

	A2 3 424(,[2 3]A)2 12-24AA[1;3;4]
2 3 4
¯12

Laminate

→apl/primitives/comma.go

	1 2 3,[0.5]4
1 2 3
4 4 4

	1 2 3,[1.5]4
1 4
2 4
3 4

	⎕IO01 2 3,[¯0.5]4
1 2 3
4 4 4

	'FOR',[.5]'AXE'
F O R
A X E

	'FOR',[1.1]'AXE'
F A
O X
R E

Table, catenate first

→apl/primitives/comma.go

	0
0

	0
1 1

	4
1
2
3
4

	2 24
1 2
3 4

	2 2 28
1 2 3 4
5 6 7 8

	10 202 24
10 20
1  2
3  4

Decode

→apl/primitives/decode.go

	31 2 1
16

	34 3 2 1
142

	21 1 1 1
15

	1 2 33 2 1
25

	1J11 2 3 4
5J9

	24 60 602 23 12
8592

	(2 12 10)3 2 1 4 0 3 1 2
5  24
101 432

Encode, representation

→apl/primitives/decode.go

	2 2 2 215
1 1 1 1

	105 15 125
5 5 5

	105 15 125
3

	(1 110)5 15 125
1 1 3

	0 105 15 125
0 1 12
5 5  5

	0 11.25 10.5
1  10
0.25 0.5

	24 60 608592
2 23 12

	2 2 2 2 215
0 1 1 1 1

	2 2 215
1 1 1

	4 5 60


	4 5 60
3 0

	(0)4 5 6
0 3

	((1+2135)2)135
1 0 0 0 0 1 1 1

	24 60 60162507
21 8 27

	0 24 60 60162507
1 21 8 27

	10 10 10215 345 7
2 3 0
1 4 0
5 5 7

	(4 28 2)15
0 1
0 1
1 1
7 1

	3 2J32
0J2 ¯1J2

	0 2J32
0J¯1 ¯1J2

	3 2J32
0J2 ¯1J2

	3 2J32 1
0J2  0J2
¯1J2 ¯2J2

	102 2 2 215
1111

	10 10 10123
1 2 3

	10 10 10123 456
1 4
2 5
3 6

	2 2 2¯1
1 1 1

	0 2 2¯1
¯1 1 1

	0 13.75 ¯3.75
3   ¯4
0.75 0.25

	1 00
0 0

	00
0

	00 0
0 0

	0 00
0 0

	1 0234
0 234

Reduce, reduce first, reduce with axis

→apl/operators/reduce.go

	+/1 2 3
6

	+1 2 3
6

	+/2 3 1 6
1 2 3
4 5 6

	+/3


	+/1 13
1

	+/2 36
6 15

	+2 36
5 7 9

	+/0
0

	+/1
1

	+/11
1

	-/11
1

	+/[1]2 36
5 7 9

	+/[1]3 412
15 18 21 24

	+/[2]3 412
10 26 42

	×/[1]3 4 12
45 120 231 384

	÷/[2]2 1 42×8
2  4  6  8
10 12 14 16

	÷/[2]2 0 30
1 1 1
1 1 1

N-wise reduction

→apl/operators/reduce.go

	6+/6
21

	4+/6
10 14 18

	5+/6
15 20

	3+/6
6 9 12 15

	1+/6
1 2 3 4 5 6

	0+/0
0

	0+/0
1

	1+/0


	¯1+/0


	4+/2 36
2 0

	2+/3 412
3  5  7
11 13 15
19 21 23

	¯2-/1 4 9 16 25
3 5 7 9

	2-/1 4 9 16 25
¯3 ¯5 ¯7 ¯9

	3×/6
6 24 60 120

	¯3×/6
6 24 60 120

	0×/5
1 1 1 1 1 1

	4+/[1]4 312
22 26 30

	3+/[1]4 312
12 15 18
21 24 27

	2+/[1]4 312
5  7  9
11 13 15
17 19 21

	0×/[1]2 312
1 1 1
1 1 1
1 1 1

	1+/6
1 2 3 4 5 6

	+/1000+/10000
45009500500

Scan, scan first, scan with axis

→apl/operators/reduce.go

	+\1 2 3 4 5
1 3 6 10 15

	+\2 36
1 3  6
4 9 15

	+2 36
1 2 3
5 7 9

	-\1 2 3
1 ¯1 2

	/0 0 1 0 0 1 0
1

	^\1 1 1 0 1 1 1
1 1 1 0 0 0 0

	+\1 2 3 4 5
1 3 6 10 15

	+\[1]2 36
1 2 3
5 7 9

Replicate, compress

→apl/operators/reduce.go

	1 1 0 0 1/'STRAY'
S T Y

	1 0 1 0/3 412
1  3
5  7
9 11

	1 0 1/1 2 3
1 3

	1/1 2 3
1 2 3

	3 2 1/1 2 3
1 1 1 2 2 3

	1 0 1/2
2 2

	1/1
1

	⍴⍴(,1)/2
1

	3 4/1 2
1 1 1 2 2 2 2

	1 0 1 0 1/5
1 3 5

	1 ¯2 3 ¯4 5/5
1 0 0 3 3 3 0 0 0 0 5 5 5 5 5

	2 0 1/2 36
1 1 3
4 4 6

	0 12 36
4 5 6

	0 16
6

	1 0 1/4
4 4

	1 0 1/,3
3 3

	1 0 1/1 15
5 5

	1 2/[2]2 2 14
1
2
2

3
4
4

	A2 ¯1 1/[1]3 2 424A+/+/A
4 2 4
36 36 0 164

	2/[2]3 2 424
3 4 4

	¯1 1/[2]3 1 412
3 2 4

	1 0 2 ¯1[2]3 412
3 4

	0 1/[1]2 36
4 5 6

	B2 2'ABCD'A3 26(1 0 1/[1]A)BA
A B
3 4
C D

Expand, expand first

→apl/operators/reduce.go

	1 0 1 0 0 1\1 2 3
1 0 2 0 0 3

	1 0 0\5
5 0 0

	0 1 0\3 17 8 9
0 7 0
0 8 0
0 9 0

	1 0 0 1 0 1\7 8 9
7 0 0 8 0 9

	(0)\3
0

	(0)\2 03
2 0

	1 0 1\0 20
0 3

	0 0 0\2 00
0 0 0
0 0 0

	1 0 12 36
1 2 3
0 0 0
4 5 6

	0\0
0

	1 ¯2 3 ¯4 5\3
3 0 0 3 3 3 0 0 0 0 3 3 3 3 3

	1 0 1\1 3
1 0 3

	1 0 1\2
2 0 2

	1 0 1 1\1 2 3
1 0 2 3

	1 0 1 13
3 0 3 3

	0 1\3 13 2 4
0 3
0 2
0 4

	0 0\5
0 0

	1 0 12 36
1 2 3
0 0 0
4 5 6

	1 0 1\3 26
1 0 2
3 0 4
5 0 6

	1 0 1 1\2 36
1 0 2 3
4 0 5 6

	1 0 1\[1]2 36
1 2 3
0 0 0
4 5 6

 TODO expand with selective specification

Pi times, circular, trigonometric

→apl/primitives/elementary.go

	0 1 2
0 3.14159 6.28319

	1E¯12>|1+*0J1
1

	0 ¯1  1
0 1.5708

	1(1)÷2 3 4
1 0.866025 0.707107

	2(1)÷3
0.5

	9 113.5J¯1.2
3.5 ¯1.2

	9 11.3.5J¯1.2 2J3 3J4
3.5 2 3
¯1.2 3 4

	¯4¯1
0

	32
¯2.18504

	21
0.540302

	÷32
¯0.457658

	1○○30÷180
0.5

	2○○45÷180
0.707107

	¯11
1.5708

	¯2.54032023059
0.999979

	(¯1.5)×180÷1
30

	(¯31)×180÷1
45

	51
1.1752

	61
1.54308

	¯51.175201194
1

	¯61.543080635
1

Take, drop

→apl/primitives/take.go

	5'ABCDEF'
A B C D E

	51 2 3
1 2 3 0 0

	¯51 2 3
0 0 1 2 3

	2 32 48
1 2 3
5 6 7

	¯1 ¯22 48
7 8

	12
2

	12
1

	1 1 12
2

	1 1 12
1 1 1

	(0)2
2

	(0)2


	20
0 0

	2 32
2 0 0
0 0 0

	4'OVERBOARD'
B O A R D

	¯5'OVERBOARD'
O V E R

	10'OVERBOARD'
0

	0 ¯23 39
1
4
7

	¯2 ¯13 39
1 2

	13 39
4 5 6
7 8 9

	1 12 3 424
17 18 19 20
21 22 23 24

	¯1 ¯12 3 424
1 2 3 4
5 6 7 8

	312 31 45 10 57
10 57

	¯312 31 45 10 57
12 31

	0 23 515
3  4  5
8  9 10
13 14 15

	3 12 3'ABCDEF'
0 2

	2 32 3'ABCDEF'
0 0

	04
4

	04
1

	0 0 04
4

	0 0 04
1 1 1

	15
0

	05
1

	1 2 34
0 0 0

	''5
5

	⍴⍴''5
0

	12 36
1 2 3

	1[1]2 36
1 2 3

	1 3[1 2]2 36
1 2 3

	2[1]3 5'GIANTSTORETRAIL'
G I A N T
S T O R E

	¯3[2]3 5'GIANTSTORETRAIL'
A N T
O R E
A I L

	3[1]2 36
1 2 3
4 5 6
0 0 0

	¯4[1]2 36
0 0 0
0 0 0
1 2 3
4 5 6

	¯1 3[1 3]3 3 4'HEROSHEDDIMESODABOARPARTLAMBTOTODAMP'
L A M
T O T
D A M

	2[2]2 3 424
1 2 3 4
5 6 7 8

13 14 15 16
17 18 19 20

	2[3]2 3 424
1  2
5  6
9 10

13 14
17 18
21 22

	2 ¯2[3 2]2 3 424
5  6
9 10

17 18
21 22

	2 ¯2[2 3]2 3 424
3 4
7 8

15 16
19 20

	1[1]3 4'FOLDBEATRODE'
B E A T
R O D E

	1[2]3 4'FOLDBEATRODE'
O L D
E A T
O D E

	A3 4'FOLDBEATRODE'(1[1]A)1 0A
1

	A3 4'FOLDBEATRODE'(1[2]A)0 1A
1

	A3 2 4241 ¯1[2 3]A
5 6 7

13 14 15

21 22 23

	A3 2 4241 ¯1[3 2]A
2 3 4

10 11 12

18 19 20

	A2 3 4241[2]A
2 2 4

	A2 3 4242[3]A
3  4
7  8
11 12

15 16
19 20
23 24

	A2 3 4242 1[3 2]A
7  8
11 12

19 20
23 24

Format as a string, Execute

→apl/primitives/format.go

	10
10

	10.1
10.1

	123.45678901234
123.457

	4123.45678901234
123.5

	`%.3f@%.1f 1J2
2.236@63.4

	`%.3f ¯1.23456
¯1.235

	`-%.3f ¯1.23456
-1.235

	"alpha"
alpha

	¯1"alpha"
"alpha"

	¯1"al\npha"
"al\npha"

	`csv 2 36
1,2,3
4,5,6


	`csv 2 2`a`b`c"t`d
a,b
"c""t",d


	"1+1"
2

 TODO: dyadic format with specification.
 TODO: dyadic execute with namespace.

Grade up, grade down, sort

→apl/primitives/grade.go

	23 11 13 31 12
2 5 3 1 4

	23 14 23 12 14
4 2 5 1 3

	5 34 16 37 2 9 26 5 11 63 3 18 45 5 11 54
2 4 1 5 3

	22.5 1 15 3 ¯4
5 2 4 3 1

	33 11 44 66 22
4 3 1 5 2

	'alpha'
1 5 4 2 3

	'ABCDE''BEAD'
2 4 1 3

 TODO dyadic grade up/down is only implemented for vector L
	A23 11 13 31 12A[A]
11 12 13 23 31

Reverse, revere first

→apl/primitives/reverse.go

	1 2 3 4 5
5 4 3 2 1

	2 36
3 2 1
6 5 4

	2 36
4 5 6
1 2 3

	[1]2 36
4 5 6
1 2 3

	[2]2 36
3 2 1
6 5 4

	A2 312  ([1]A)2 3-6A
¯4 ¯5 ¯6
¯1 ¯2 ¯3

	'DESSERTS'
S T R E S S E D

Rotate

	11 2 3 4
2 3 4 1

	101 2 3 4
3 4 1 2

	¯11 2 3 4
4 1 2 3

	(-7)1 2 3 4
2 3 4 1

	1 22 36
2 3 1
6 4 5

	(2 22 ¯3 3 ¯2)2 2 416
3 4 1 2
6 7 8 5

12  9 10 11
15 16 13 14

	(2 32 ¯3 3 ¯2 1 2)2 2 312
1  8 9
4 11 6

7 2  3
10 5 12

	(2 40 1 ¯1 0 0 3 2 1)[2]2 2 416
1 6 7 4
5 2 3 8

9 14 11 16
13 10 15 12

	A3 412(1 ¯1 2 ¯2[1]A)3 4'ABCDEFGHIJKL'A
I F G L
A J K D
E B C H

Transpose

→apl/primitives/transpose.go

	1 2 12 3 46
1 5 3
2 6 4

	3 11 2 3
1 2 3

	2 36
3 2

	+/+/1 3 22 3 424
78 222

	+/+/3 2 12 3 424
66 72 78 84

	+/+/2 1 32 3 424
68 100 132

	1 1 12 3 318
1 14

	1 1 12 3 4'ABCDEFGHIJKL',12
A 6

	1 1 22 3 4'ABCDEFGHIJKL',12
A B C D
5 6 7 8

	2 2 12 3 4'ABCDEFGHIJKL',12
A 5
B 6
C 7
D 8

	1 2 22 3 4'ABCDEFGHIJKL',12
A F  K
1 6 11

	1 2 12 3 4'ABCDEFGHIJKL',12
A E  I
2 6 10

	⍴⍴(0)5
0

	2 1 33 2 424
2 3 4

	⎕IO01 0 23 2 424
2 3 4

	A3 39(1 1A)10 20 30A
10  2  3
4 20  6
7  8 30

Enclose, string catenation, join strings, disclose, split

→apl/primitives/enclose.go

	'alpha'
alpha

	"+"'alpha'
a+l+p+h+a

	"\n""alpha" "beta" "gamma"
alpha
beta
gamma

	`alpha`beta`gamma
alpha beta gamma

	(`alpha`beta`gamma)
alpha beta gamma

	`alpha`beta`gamma
alpha beta gamma

	"alpha"
a l p h a

	'p'"alpha"
al ha

	','",a,,b,c"
5

	""" a  b c\tc "
4

Domino, solve linear system

→apl/primitives/domino.go

	2 22 0 0 1
0.5 0
0 1

	(1 ¯2 0)3 33 2 ¯1 2 ¯2 4 ¯1 .5 ¯1
1
¯2
¯2

Dates, Times and durations

→apl/numbers/time.go

	2018.12.23
2018.12.23T00.00.00.000

	2018.12.23+12s
2018.12.23T00.00.12.000

	2018.12.24<2018.12.23
0

	/3s 2s 10s 4s
2s

	2018.12.23-1s
2018.12.22T23.59.59.000

	2017.03.01-2017.02.28
24h0m0s

	2016.03.01-2016.02.28
48h0m0s

	3m-62s
1m58s

	-3s
¯3s

	ׯ3h 0s 2m 2015.01.02
¯1 0 1 1

	(|¯1s)+|1s
2s

	3×1h
3h0m0s

	1m × 5
1m0s 2m0s 3m0s 4m0s 5m0s

	2018.12.23 + 1h×(¯1+24)
24 1

	4m×42.195
2h48m46.8s

	2018.12.23+3.5s
2018.12.23T00.00.04.000

	3h÷42.195
4m15s

	"2006-01-02 15:04:05"2019.02.17T15.39.23
2019-02-17 15:39:23

	"W"2019.02.27T15.39.23
2019w09

	"Q"2019.02.27T15.39.23
2019Q1

Round times and durations

→apl/numbers/time.go

	`Y 2019.02.27T13.39.02
2019.01.01T00.00.00.000

	`M 2019.02.27T13.39.02
2019.02.01T00.00.00.000

	`D 2019.02.27T13.39.02
2019.02.27T00.00.00.000

	`h 2019.02.27T13.39.02
2019.02.27T13.00.00.000

	`m 2019.02.27T13.39.02
2019.02.27T13.39.00.000

	`s 2019.02.27T13.39.02
2019.02.27T13.39.02.000

	`Q 2019.02.27T13.39.02
2019.01.01T00.00.00.000

	`W 2019.02.27T13.39.02
2019.02.25T00.00.00.000

Basic operators

→apl/operators/

	+/1 2 3
6

	1 2 3 +.× 4 3 2
16

	(2 36) +.× 3 25+6
52  58
124 139

	-\×\+\1 2 3
1 ¯2 16

	+/+/+/+/1 2 3
6

	+.×/2 3 4
24

	+.×.*/2 3 4
2.41785E+24

	+.*.×/2 3 4
24

Identify item for reduction over empty array

→apl/operators/identity.go

	+/0
0

	-/0
0

	×/0
1

	÷/0
1

	|/0
0

	/0
¯1.79769E+308

	/0
1.79769E+308

	*/0
1

	!/0
1

	^/0
1

	/0
1

	/0
0

	</0
0

	/0
1

	=/0
1

	/0
1

	>/0
0

	/0
0

	/0
0

	/0
0

	/0
0

	/0 3 1


	/3 3 0
0 0 0

	/0
0

Outer product

→apl/operators/dot.go

	10 20 30.+1 2 3
11 12 13
21 22 23
31 32 33

	(3).=3
1 0 0
0 1 0
0 0 1

	1 2 3.×4 5 6
4  5  6
8 10 12
12 15 18

Each

→apl/operators/each.go

	-¨1 2 3
¯1 ¯2 ¯3

	1+¨1 2 3
2 3 4

	1 2 3+¨1
2 3 4

	1 2 3+¨4 5 6
5 7 9

	1+¨1
2

Commute, duplicate

→apl/operators/commute.go

	.1 2 3
1 1 1
0 1 1
0 0 1

	+/(÷)10
5.5

	3
3 3 3

	3-4
1

	+/2*2 24 7 1 8
65 65

	3-4
1

Composition

→apl/operators/jot.go

	+/¨2 4 6
3 10 21

	1 10 20 30
¯0.544021 0.912945 ¯0.988032

	+÷/401
1.61803

	(*0.5)4 16 25
2 4 5

Power operator

→apl/operators/power.go

	2 +2 3 4
¯0.366513 0.0940478 0.326634

	1+÷=1
1.61803

 TODO: function inverse

Rank operator

→apl/operators/rank.go

	+\0 +2 31
1 1 1
1 1 1

	+\1 +2 31
1 2 3
1 2 3

	1 +2 31
3
3

	2 +2 3 51
3 5
3 5

	4 5+1 0 2 +2 27 8 9 10
11 12
13 14

12 13
14 15

	2 2 21 0 5
0 0 0 1 1
0 1 1 0 0
1 0 1 0 1

	1 +3 13
1 0 0
1 2 0
1 2 3

At

→apl/operators/at.go

	(10 20@2 4)5
1 10 3 20 5

	10 20@2 45
1 10 3 20 5

	((2 310 20)@2 4)4 312
1  2  3
10 20 10
7  8  9
20 10 20

	@(0.5<)3 31 4 0.2 0.3 0.3 4
5   5 0.2
0.3 0.3   5
5   5 0.2

	÷@2 4 5
1 0.5 3 0.25 5

	@2 4 5
1 4 3 2 5

	10×@2 45
1 20 3 40 5

	(+\@2 4)4 312
1  2  3
4  9 15
7  8  9
10 21 33

	0@(2|)5
0 2 0 4 0

	÷@(2|)5
1 2 0.333333 4 0.2

	@(2|)5
5 2 3 4 1

Stencil

→apl/operators/stencil.go

	{//}(3 3) 3 325
5 6 6
8 9 9
8 9 9

Assignment, specification

→apl/operators/assign.go

	X3

	-X3
¯3

	X3X4

	X3X
3

	f+

	f+3 f 3
6

	X4÷X
0.25

	A2 3  A
2 3

Indexed assignment

→apl/operators/assign.go

	A2 3 4  A[1]1  A
1 3 4

	A2 24  +A[1;1]3  A
3
3 2
3 4

	A5  A[2 3]10  A
1 10 10 4 5

	A2 36  A[;2 3]2 24  A
1 1 2
4 3 4

 TODO: choose/reach indexed assignment

Multiple assignment

→apl/operators/assign.go

	ABCD1  A B C D
1 1 1 1

Vector assignment

→apl/operators/assign.go

	(A B C)2 3 4  A  B  C 
2
3
4

	-A B C1 2 3  A B C
¯1 ¯2 ¯3
1 2 3

Modified assignment

→apl/operators/assign.go

	A1  A+1  A
2

	A1 2 A+1  A
2 3

	A1 2  A+3 4  A
4 6

	A1 2  A{+}3  A
4 5

	A B C1 2 3  A B C + 4 5 6  A B C
5 7 9

Selective assignment/specification

→apl/operators/assign.go

	A10 20 30 40  (2A)100 200  A
100 200 30 40

	A'ABCD'  (3A)1 2 3  A
1 2 3 D

	A1 2 3  ((0)A)4  A
4 4 4

	A2 36  (,A)2×6  A
2  4  6
8 10 12

	A3 412  (4,A)10 20 30 40  ,A 
10 40 3 4 20 6 7 8 30 10 11 12

	A2 3'ABCDEF'  A[1;1 3]8 9  A
8 B 9
D E F

	A2 3 4  A[]9  A
9 9 9

	A4 312  (1 0 0/A)1 44  A[3;1]
3

	A3 26  (1 0/A)'ABC'  A
A 2
B 4
C 6

	A4 5 6  (1 ¯1  1/A)7 8 9  A
7 5 9

	A3 26  B2 2'ABCD'  (1 0 1/[1]A)B  A
A B
3 4
C D

	A5 6 7 8 9  (2A)3  A
5 6 1 2 3

	A3 4'ABCDEFGHIJKL'  (1 ¯1A)2 36  A
A B C D
1 2 3 H
4 5 6 L

	A2 36  (1[1]A)9 8 7  A
1 2 3
9 8 7

	A2 3 412(¯1 2[3 2]A)0A
1 2 3  4
5 6 7  8
0 0 0 12

1 2 3  4
5 6 7  8
0 0 0 12

	A'ABC'  (1 0 1 0 1\A)5  A
1 3 5

	A2 36  (1 0 1 1\A)10×2 48  A
10 30 40
50 70 80

	A3 26  (1 1 0 0 1\[1]A)5 2-10  A
¯1  ¯2
¯3  ¯4
¯9 ¯10

	A2 36  (,A)10×6  A
10 20 30
40 50 60

	A2 3 424  (,[2 3]A)2 12-24AA[2;3;]
2 3 4
¯21 ¯22 ¯23 ¯24

	A'GROWTH'  (2 3A)2 3-6  (4A)4  A
1 2 3 4 ¯5 ¯6

	A3 412  (A)3 4'STOPSPINODER'  A
P O T S
N I P S
R E D O

	A2 36  ([1]A)2 3-6  A
¯4 ¯5 ¯6
¯1 ¯2 ¯3

	A6  (2A)10×6  A
50 60 10 20 30 40

	A3 412  (1 ¯1 2 ¯2A)3 44×12  A
36 24 28 48
4 40 44 16
20  8 12 32

	A3 412  (1 ¯1 2 ¯2[1]A)3 44×12  A
36 24 28 48
4 40 44 16
20  8 12 32

	A5  (2A) 10 20  A
10 20 3 4 5

	A2 36  (¯2[2]A)2 210×4  A
1 10 20
4 30 40

	A3 39  (1 1A)10 20 30  A
10  2  3
4 20  6
7  8 30

	A3 3'STYPIEANT'  (A)3 39  A
1 4 7
2 5 8
3 6 9

 TODO: First (↓) and Pick (⊃) are not implemented

Functional selective specification

→apl/operators/assign.go

	A3 39  A[{[2]>[1]}]0  A
1 0 0
4 5 0
7 8 9

	A10×3 39  A[{(>30)^<60}]0  A
10 20 30
0  0 60
70 80 90

Lambda expressions

→apl/lambda.go

	{2×}3
6

	2{+3{×}+2}2
14

	2{(+3){×}+{+1+}1+2}2
40

	1{1+{1+{1++}1+}1+}1
7

	2{}4


	{×}/2 3 4
24

	A1{A+1A>0:BAB}0
2

	{1:1+2{1:1+}3}4
3

Evaluation order

→apl/function.go

	A1A+(A2)
4

	A+A3
6

	A1A{( )}A+10
11 10

Lexical scoping

→apl/lambda.go

	A1{A2A}0A
2
1

	X{A3B40:ignored42}0XAB
42
A
B

	{A1{A}+1}1
2

	A1S{A2}0A
1

	A1S{A2}0A
2

	A11S{A[1]2}0A
2

	A1{A+1A}0A
2
2

	+X{A3B4}0
4

Default left argument

→apl/lambda.go

	f{3+} f 4  1 f 4
7
5

Recursion

→apl/lambda.go

	f{1: 1  ×-1}  f 10
3628800

	S0{>20:+}1
1
2
3
5
8
13
21
34

Tail call

→apl/lambda.go

	{>1000:+1}1
1001

Trains, forks, atops

→apl/train.go

	-,÷ 5
¯0.2

	(-,÷)5
¯5 0.2

	3(+×-)1
8

	(+÷)3+13
10

	({/})3
1 2 2 3 3 3

	(2/)3
1 1 2 2 3 3

	6(+,-,×,÷)2
8 4 12 3

	6(+,-,×,÷)2
3 12 4 8

	(12) (1 )9
9

	(*-)1
0.367879

	2(*-)1
2.71828

	1(*-)2
0.367879

	3(÷+×-)1
0.125

	(÷+×-)4
¯0.0625

	(÷+×-)4
¯0.25

	6(÷+×-)4
0.2

	(3+*)4
57.5982

Go interface package strings

→apl/strings/register.go

	ustoupper  u "alpha"
ALPHA

	";" sjoin "alpha" "beta" 
alpha;beta

Lists

→apl/list.go

	(1;2;)
(1;2;)

	(1 5 9;(2;3+4;);)
(1 5 9;(2;7;);)

	(+;1;2;)
(+;1;2;)

	(/;+;1;2;)
(/;+;1;2;)

	(.;+;×;1 2;3 4;)
(.;+;×;1 2;3 4;)

	1 2 3+(4;5;6;)
5 7 9

	+/(1;2;3;)
6

	+/(1;2;(3;4;);)
6 7

Lists catenate, enlist, cut, each

→apl/primitives/comma.go

	1,(2;3;)
(1;2;3;)

	(1;2;),3
(1;2;3;)

	(1;2;),(3;4;)
(1;2;3;4;)

	((1;2;);(3;4;);),(5;6;)
((1;2;);(3;4;);5;6;)

	3
(3;)

	0
(;)

	(1;2;3;)
(1;2;3;)

	(1;(2;3;);(4;(5;6;););7 8 9;)
(1;2;3;4;5;6;7 8 9;)

	1 3(1;2;3;)
((1;2;);(3;);)

	(1;2;(3;4;);)+¨(1;2;(3;4;);)
(2;4;6 8;)

	¨(1;2;(3;4;);)
(1;1;2;)

List indexing

→apl/primitives/index.go

	L(1;2;)L[2]
2

	L(1;(2;3;);4;)L[2;1]
2

	L(1;(2;3;);4;)L[0]
4

	L(1;(2;3;);4;)L[2;0]
3

	L(1;(2;3;);4;)L[2]
(2;3;)

	L(1;(2;3;);4;)L[2][2]
3

Indexing with lists is not supported

List indexed assignment

→apl/primitives/index.go

	L(1;2;)L[1]3L
(3;2;)

	L(1;(2;3;);4;)L[2;1]5L
(1;(5;3;);4;)

	L(1;(2;3;);4;)L[2;0]5L
(1;(2;5;);4;)

	L(1;(2;3;);4;)L[2;¯1]×5L
(1;(10;3;);4;)

Dictionaries

→apl/object.go

	D`alpha#1 2 3D[`alpha]`xyzD
alpha: xyz

	D`alpha#1D[`alpha`beta]3 4D
alpha: 3
beta:  4

	D`a`b`c#1D#D
a: 1
b: 1
c: 1
a b c

	D`a`b`c#1 2 3GD[`a`c]G
a: 1
c: 3

	D`a`b#(1;(`c`d#`F`G);)D[`b;`d]123D[`b]
c: F
d: 123

	D`a`b#(1;2;)D[`b]+3D
a: 1
b: 5

Table, transpose a dict to create a table

→apl/primitives/transpose.go

	`a`b#1 2
a b
1 2


	`a`b`c#(1 2 3;4 5 6;7 8 9;)
a b c
1 4 7
2 5 8
3 6 9


	⍉⍉`a`b`c#(1 2 3;4 5 6;7 8 9;)
a: 1 2 3
b: 4 5 6
c: 7 8 9

	`a`b#(1 2 3;4 5 6;)
2

	`a`b#(1 2 3;4 5 6;)
3 2

Indexing tables

→apl/primitives/index.go

	T`a`b#1 2T[1]
a: 1
b: 2

	T`a`b#(1;3;)T[1]
a: 1
b: 3

	T`a`b#1 2T[11]
a b
1 2


	T`a`b#(1 2 3;3 4 5;)T[1]
a: 1
b: 3

	T`a`b#(1 2 3;3 4 5;)T[2;`b]
4

	T`a`b#(1 2 3;3 4 5;)T[1 3]
a b
1 3
3 5


	T`a`b`c#(1 2 3;4 5 6;7 8 9;)T[;`b]
4 5 6

	T`a`b`c#(1 2 3;4 5 6;7 8 9;)T[`b]
4 5 6

	T`a`b`c#(1 2 3;4 5 6;7 8 9;)T[;1`b]
b
4
5
6


	T`a`b`c#(1 2 3;4 5 6;7 8 9;)T[1 2;`b]
b
4
5


	T`a`b`c#(1 2 3;4.1 5.2 6.3;7 8 9;)T[]
1 4.1 7
2 5.2 8
3 6.3 9

	T`a`b#(1 2 3;3 4 5;)T[{>2}]
a b
3 5


	T`A`B#(1 2 3;3 4 5;)T[{6=A+B};`B]
B
4


	T`A`B`C`D#(1.1 1.2 1.3;2.1 2.2 2.3; 3.1 3.2 3.3;1 2 1;)T[;`A;`min`max #(/;/;)]
min max
1.1 1.3

Table updates

→apl/operators/assign.go

	T`a`b#(3;4-3;)  T
a b
1 3
2 2
3 1


	T`a`b#(3;4-3;)  T[1 3]0  T
a b
0 0
2 2
0 0


	T`a`b#(3;4-3;)  T[1 3]10×2 24  T
a  b
10 20
2  2
30 40


	T`a`b#(3;4-3;)  T[1 3]`a`b#8 9  T
a b
8 9
2 2
8 9


	T`a`b#(3;4-3;)  T[1 3]`a`b#(8 9;10 11;)  T
a b
8 10
2 2
9 11


	T`a`b#(3;4-3;)  T[;`b]5 6 7  T
a b
1 5
2 6
3 7


	T`a`b#(3;4-3;)  T[{<3};`b]9  T
a b
1 9
2 9
3 1


	T`A`B#(3;4-3;)  T[{B<3};`A]9  T
A B
1 3
9 2
9 1


	T`a`b#(3;4-3;)  T[1 3]+1  T
a b
2 4
2 2
4 2


	T`a`b#(3;4-3;)  T[`a]1  T
a b
1 3
1 2
1 1


	T`a`b#(3;4-3;)  T[`a`b]1  T
a b
1 1
1 1
1 1

Elementary functions on dicts and tables

→apl/primitives/elementary.go

	A`a`b#(1 2;3 4;)-A
a: ¯1 ¯2
b: ¯3 ¯4

	A`a`b#(1 2;3 4;)-A
a  b
¯1 ¯3
¯2 ¯4


	A`a`b#(1 2;3 4;)B`a`b#(9 8;7 6;)B-A
a: 8 6
b: 4 2

	A`a`b#(1 2;3 4;)B`b`c#(9 8;7 6;)B-A
b: 6 4
c: 7 6
a: ¯1 ¯2

	A`a`b#(1 2;3 4;)B`b`c#(9 8;7 6;)B-A
b c a
6 7 ¯1
4 6 ¯2


	A`a`b#(1 2;3 4;)A-3
a  b
¯2 0
¯1 1


	A`a`b#(1 2;3 4;)A-5 7
a: ¯4 ¯5
b: ¯2 ¯3

	A`a`b#(1 2;3 4;)3-A
a: 2 1
b: 0 ¯1

Catenate tables or objects

→apl/primitives/comma.go

	A`a`b#(1 2;3 4;)B`a`b#(5 6;7 8;)A,B
a: 1 2 5 6
b: 3 4 7 8

	A`a`b#(1 2;3 4;)B`b`c#(5 6;7 8;)A,B
a: 1 2
b: 3 4 5 6
c: 7 8

	A`a`b#(1 2;3 4;)B`a`b#(5 6;7 8;)AB
a: 5 6
b: 7 8

	A`a`b#(1 2;3 4;)B`b`c#(5 6;7 8;)AB
a: 1 2
b: 5 6
c: 7 8

	A`a`b#(1 2;3 4;)B`a`b#(5 6;7 8;)A,B
a b
5 7
6 8


	A`a`b#(1 2;3 4;)B`b`c#(5 6;7 8;)A,B
a b c
1 5 7
2 6 8


	A`a`b#(1 2;3 4;)B`a`b#(5 6;7 8;)AB
a b
1 3
2 4
5 7
6 8


	T`a`b#(1 2;3 4;)T,`c#5 6T
a b c
1 3 5
2 4 6


	A`a`b#(1 2;3 4;)A5
a b
1 3
2 4
5 5


	A`a`b#(1 2;3 4;)A,5 6
a b
1 3
2 4
5 5
6 6


	A`a`b#(1 2;3 4;)5 6,A
a b
5 5
6 6
1 3
2 4


	A`a`b#(1 2;3 4;)A,5
a: 1 2 5
b: 3 4 5

	A`a`b#(1 2;3 4;)5 6A
a: 5 6 1 2
b: 5 6 3 4

Reduction over objects and tables

→apl/operators/reduce.go

	+/`a`b`c#(1 2 3;4 6;7;)
a: 6
b: 10
c: 7

	+\`a`b`c#(1 2 3;4 6;7;)
a: 1 3 6
b: 4 10
c: 7

	+/`a`b`c#(1 2 3;4 5 6;7 8 9;)
a b  c
6 15 24


	+\`a`b`c#(1 2 3;4 5 6;7 8 9;)
a b  c
1 4  7
3 9  15
6 15 24


	2+/`a`b#(1 2 3;4 6 7;)
a: 3 5
b: 10 13

	2+/`a`b#(1 2 3;4 6 7;)
a b
3 10
5 13


	T`a`b`c#(1 2 3;4 5 6;7 8 9;)T(+÷)T
a b c
1 4 7
2 5 8
3 6 9
2 5 8

Object, go example

→apl/xgo/register.go

	Xgot 0X[`V]`a`bX[`V]
a b

	Xgot 0X[`I]55X[`inc]0X[`I]

56

	Xgot 0X[`V]'abcd'X[`join]'+'
(4;a+b+c+d;)

	Sgos 0#[1]S
sum

	Tgot 0T[`S;`A]3T[`S;`V]2 3T[`S]
A: 3
B: 0
V: 2 3

Channels read, write and close

→apl/primitives/take.go

	Cgosource 62 3C
0 1 2
3 4 5

	Cgosource 6CCC
0
1
1

Reduce, scan and each over channel

→apl/operators/reduce.go

	Cgosource 6+/C
15

	Cgosource 6+\C
0 1 3 6 10 15

	Cgosource 6\C
0 1 2 3 4 5

	Cgosource 45+¨C
5
6
7
8

	Cgosource 3C
0
1
2

	Cgosource 3-¨C
0
¯1
¯2

	<¨3
1
2
3

	(<2)2 2 312
1 2 3
4 5 6
7  8  9
10 11 12

Communicate over a channel

→apl/channel.go

	Cgoecho"?"C'a'C'b'2CC
a
b
?a ?b
1

Primes

	f{(2=+0=X.|X)X}  f 42
2 3 5 7 11 13 17 19 23 29 31 37 41

	⎕IO0  f{(~XX.×X)X2}  f 42
2 3 5 7 11 13 17 19 23 29 31 37 41

π

	.5*6×+/÷2*1000
3.14064

	4×-/÷¯1+2×100
3.13159

	4×+/{(  1 0 ¯1 0)÷}100
3.12159

Conway-completeness

	A5 5(232)1215488l{3=S-4=S({+/,}3 3)}(l8)A
0 0 0 0 0
0 0 0 0 0
0 0 0 0 1
0 0 1 0 1
0 0 0 1 1

	A5 5(232)1215488  s{+/,}3 3  l{(3=s-(4=s))}  (l8)A
0 0 0 0 0
0 0 0 0 0
0 0 0 0 1
0 0 1 0 1
0 0 0 1 1

	A5 5(232)1215488  l{((3=-(4=)){+/,}3 3)}  (l8)A
0 0 0 0 0
0 0 0 0 0
0 0 0 0 1
0 0 1 0 1
0 0 0 1 1

PASS
ok  	github.com/ktye/iv/apl/primitives	0.891s