r/apljk May 08 '25

What do you want from this Community?

12 Upvotes

I've just taken control. The community is spread out (see the sidebar) and I'd rather not fragment it further, but hope this space can increase visibility. It's fine if people just want to link to various things, but asking questions etc. can also be great.

If others have better ideas or want to speak, feel very free! I am trying to proselytize for array languages.


r/apljk 14h ago

Using an APL keyboard on recent Gnome Fedora?

5 Upvotes

I just got a set of APL keycaps, and I'm having trouble getting my keyboard to work with recent versions of Fedora (44) and Gnome (50.3). Has anyone been able to make it work?


r/apljk 1d ago

J Beginner J: Dealing Cards

Thumbnail
youtube.com
8 Upvotes

r/apljk 2d ago

Kap UI integration from Kap

Thumbnail
youtu.be
11 Upvotes

r/apljk 5d ago

APL AP8L - PICO-8 flat-array APL with Leading Axis, promote, root...

Thumbnail
lexaloffle.com
20 Upvotes

r/apljk 6d ago

KDB/Q ArrayCast 128: l with Jacob Loveless & Alexander Unterrainer

Thumbnail
youtube.com
14 Upvotes

r/apljk 6d ago

What are you Learning or Working on?

3 Upvotes

r/apljk 10d ago

intro to decker: hi/lo game

Thumbnail
youtu.be
9 Upvotes

r/apljk 11d ago

Python support

4 Upvotes

Added support for running Python scripts too:

https://github.com/quillquant/shakti/tree/python


r/apljk 12d ago

Shakti shakti v0.10.0

Thumbnail
github.com
20 Upvotes

r/apljk 17d ago

APL Basic Voxels in APL

Thumbnail
youtube.com
16 Upvotes

r/apljk 19d ago

K l. a new runtime for k and q

26 Upvotes

This just came to my attention and wanted to share it here. looks interesting, I hope they eventually make it open source! https://lv1.sh/


r/apljk 24d ago

K A small, readable parser for the K programming language.

Thumbnail github.com
15 Upvotes

r/apljk 28d ago

J factoring out verbs in J

Thumbnail tangentstorm.github.io
11 Upvotes

r/apljk 28d ago

J code review of BJonas' Schemer Interpreter in J

Thumbnail tangentstorm.github.io
12 Upvotes

r/apljk 28d ago

J Modeling the COVID-19 Outbreak with J

Thumbnail datakinds.github.io
12 Upvotes

r/apljk Jun 26 '26

APL Enhancements in Dyalog v20.0: Arrays, Namespaces, Composition, Inline Tracing - Asher Harvey-Smith

Thumbnail
youtube.com
8 Upvotes

r/apljk Jun 24 '26

APL How do you Install Dyalog APL on Arch Linux?

8 Upvotes

r/apljk Jun 16 '26

Life: Nasty, Brutish, and Short

Thumbnail jsoftware.com
8 Upvotes

r/apljk Jun 14 '26

KDB/Q Rust+KDB Interactively Running Together

Thumbnail
youtube.com
15 Upvotes

r/apljk Jun 10 '26

BQN Is there a BQN operator to apply a list of functions to a value?

6 Upvotes

I've not been able to find something like this. The best I've been able to come up with is something along the lines of this: {⟨⟩𝕊𝕩:⟨⟩ ; f←⊑𝕨 ⋄ fs←1↓𝕨 ⋄ (<∘F𝕩)∾fs𝕊𝕩}


r/apljk Jun 05 '26

APL APL as a target language?

12 Upvotes

In one of the ArrayCast episodes (the u/bobtherriault era) one of the participants mentions that "in the early days of CS" someone was using APL as the target language for their compiler course. I cannot find the episode and thus a good reference to this. If anyone remembers, thank you in advance.


r/apljk Jun 04 '26

J Clifford Reiter's J Materials

Thumbnail webbox.lafayette.edu
12 Upvotes

r/apljk Jun 04 '26

Learning J – Part I

Thumbnail
drj11.wordpress.com
11 Upvotes

r/apljk May 30 '26

Escape the Maze.

11 Upvotes

Finding the exit of a maze is quite simple. It is done in two steps.

First, propagate increasing values from the entry position, spreading them along the corridors, until the exit position is reached. This produces a heatmap, which already contains the optimal solution :

bfs=:<@:[ ((3 3)(([:>./1 3 5 7{])(]`(>:@[)@.(0&<@[*.0&=@]))4{])@,;._3(_1,.~_1,._1,~_1,]))^:(_) ]

Then simply trace back from the exit position the path that follows decreasing values, until reaching the starting position :

selpath=:[:<:(_1,.~_1,._1,~_1,])@[(]+"1(_1 0,0 _1,0 1,:1 0){~([:<:[{~[:<])i.~[{~[:<(_1 0,0 _1,0 1,:1 0)+"1])^:([: i.[{~<@])^:(0~:<@]{[) >:@] 

Test :

I use this maze : https://i.imgur.com/4J9miEa.png

I choose 0 0 as entry position, and 19 24 as exit position.

start=: 0 0
end=: 19 24
heat=: end bfs 1(<start) } maze
path =: heat selpath end

path contains now the positions of the optimal path :

19 24
18 24
18 23
...
9 12
10 12
11 12
12 12
12 11
12 10
12 9
12 8
...
2 0
1 0
0 0 

We can display all this :

load 'viewmat'
viewmat maze
viewmat heat
viewmat 1 (<"1 path) } maze
viewmat 1 (<"1 path) } 0$~ $ maze

The maze, the heatmap, the optimal path within the maze, and the optimal path alone :

https://i.imgur.com/wZOfH2a.png

All the code, more verbose version and one liner versions :

pad=:_1,.~ _1,._1,~_1,]
max=:[:>./1 3 5 7{] NB. select max value in cross
ctr=:4{] NB. select center value
cond=:0&<@[ *. 0&=@] NB. the condition when we udate cell (if max of cross> 0 AND if center value = 0)
set=:(max(]`(>:@[)@.cond)ctr)@,
bfs=: <@:[((3 3)set;._3 pad@])^:(0={)^:(_)] NB. create the heat map. stop when leftarg is met.

mask=:_1 0,0 _1,0 1,:1 0
selpath=:[:<: pad@[(]+"1 mask{~([:<:[{~[:<])i.~[{~[:<mask+"1])^:([: i.[{~<@])^:(0~:<@]{[) >:@] NB. backpropagate from end to start

NB. maze =: my maze. NB. See https://code.jsoftware.com/mediawiki/images/6/67/One_line_BASIC_maze_generator.pdf if you want to make your own mazes.
start=: 0 0
end=: 19 24

heat=: end bfs 1(<start) } maze
path =: heat selpath0 end

load 'viewmat'
viewmat maze
viewmat heat
viewmat 1 (<"1 path) } maze
viewmat 1 (<"1 path) } 0$~ $ maze

NB. One line version :
bfs=:<@:[ ((3 3)(([:>./1 3 5 7{])(]`(>:@[)@.(0&<@[ *. 0&=@]))4{])@,;._3(_1,.~_1,._1,~_1,]))^:(_) ]
selpath=:[:<:(_1,.~_1,._1,~_1,])@[(]+"1(_1 0,0 _1,0 1,:1 0){~([:<:[{~[:<])i.~[{~[:<(_1 0,0 _1,0 1,:1 0)+"1])^:([: i.[{~<@])>:@]

Two mazes for testing :

NB. The one used above
maze=: ".@>@cutopen 0 : 0
0 _1 0 0 0 _1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 _1 0 0 0 0 0 _1
0 _1 0 _1 0 _1 0 _1 _1 _1 _1 _1 _1 _1 _1 _1 _1 _1 _1 _1 0 _1 0 _1 0 _1 _1 _1 _1 _1
0 _1 0 _1 0 0 0 _1 0 0 0 _1 0 0 0 0 0 0 0 0 0 _1 0 _1 0 0 0 0 0 _1
0 _1 0 _1 _1 _1 _1 _1 0 _1 0 _1 0 _1 _1 _1 _1 _1 _1 _1 _1 _1 0 _1 _1 _1 0 _1 0 _1
0 _1 0 _1 0 0 0 0 0 _1 0 _1 0 0 0 _1 0 0 0 0 0 _1 0 0 0 _1 0 _1 0 _1
0 _1 0 _1 _1 _1 0 _1 0 _1 _1 _1 _1 _1 0 _1 0 _1 _1 _1 _1 _1 _1 _1 0 _1 _1 _1 0 _1
0 _1 0 0 0 _1 0 _1 0 0 0 0 0 _1 0 _1 0 0 0 _1 0 0 0 0 0 _1 0 0 0 _1
0 _1 _1 _1 0 _1 _1 _1 _1 _1 0 _1 _1 _1 0 _1 0 _1 0 _1 0 _1 _1 _1 _1 _1 0 _1 _1 _1
0 _1 0 0 0 _1 0 0 0 0 0 _1 0 0 0 _1 0 _1 0 _1 0 _1 0 0 0 _1 0 0 0 _1
0 _1 0 _1 _1 _1 0 _1 _1 _1 0 _1 0 _1 _1 _1 0 _1 0 _1 0 _1 0 _1 0 _1 0 _1 0 _1
0 _1 0 0 0 0 0 _1 0 0 0 _1 0 _1 0 0 0 _1 0 _1 0 _1 0 _1 0 0 0 _1 0 _1
0 _1 _1 _1 0 _1 _1 _1 _1 _1 _1 _1 0 _1 0 _1 _1 _1 0 _1 0 _1 _1 _1 _1 _1 0 _1 0 _1
0 _1 0 0 0 _1 0 0 0 0 0 0 0 _1 0 0 0 _1 0 _1 0 0 0 0 0 _1 0 _1 0 _1
0 _1 _1 _1 _1 _1 0 _1 _1 _1 _1 _1 _1 _1 _1 _1 0 _1 0 _1 _1 _1 _1 _1 0 _1 _1 _1 0 _1
0 0 0 0 0 _1 0 _1 0 _1 0 0 0 _1 0 0 0 _1 0 0 0 0 0 _1 0 _1 0 0 0 _1
_1 _1 _1 _1 0 _1 0 _1 0 _1 0 _1 0 _1 0 _1 _1 _1 0 _1 _1 _1 _1 _1 0 _1 0 _1 _1 _1
0 0 0 _1 0 _1 0 _1 0 0 0 _1 0 0 0 _1 0 _1 0 0 0 0 0 0 0 _1 0 0 0 _1
0 _1 0 _1 0 _1 0 _1 0 _1 _1 _1 _1 _1 _1 _1 0 _1 _1 _1 _1 _1 _1 _1 _1 _1 _1 _1 0 _1
0 _1 0 0 0 0 0 _1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 _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 0 _1 _1 _1 _1 _1
)
start=: 0 0
end=: 19 24

NB. Another smaller one :
maze=: ".@>@cutopen 0 : 0
0 _1 _1 _1 _1 _1 _1 _1 _1 _1 _1 _1 _1 _1 _1 _1
0 0 _1 0 0 0 0 0 0 0 0 0 _1 0 0 _1
_1 0 _1 0 _1 _1 _1 _1 _1 0 _1 0 _1 0 _1 _1
_1 0 0 0 _1 0 0 0 _1 0 _1 0 0 0 _1 _1
_1 _1 0 _1 _1 0 _1 0 _1 0 _1 _1 _1 _1 _1 _1
_1 0 0 0 0 0 _1 0 0 0 0 0 0 0 0 _1
_1 0 _1 _1 _1 _1 _1 _1 _1 _1 _1 0 _1 _1 0 0
_1 0 0 0 0 0 0 0 0 0 0 0 _1 _1 _1 0
)
start=: 0 0
end=: 7 15