Mastering Dyalog APL

95 points - today at 11:42 AM

Source

Comments

gobdovan today at 2:46 PM
It always felt strange to me that the main implementation of something as niche and esolang-adjacent as APL is neither OSS nor casually usable commercially, but instead comes under an enterprise license.

Anyway, I had a fun time a while ago translating APL programs to NumPy. At some point you get what APL is all about, and you can move on with life without too many regrets. Turns out most of the time it's more like a puzzle to get an (often inefficient) terse implementation by torturing some linear algebra operators.

If you're after a language that's OSS, has terse notation, and rewires your brain by helping you think more clearly instead of puzzle-solving, TLA+ is the answer.

Edit: if you're curious to see at a glance what APL is all about:

APL code:

(2=+⌿0=∘.|⍨⍳N)/⍳N <- this computes primes up to N and is presented as the 'Hello world' of APL.

Equivalent NUMPY code:

```

R = np.arange(1, N + 1) # ⍳N

divides = (R[None, :] % R[:, None]) == 0 # 0=∘.|⍨⍳N

divisor_counts = divides.sum(axis=0) # +⌿

result = R[divisor_counts == 2] # (2=...)/⍳N

```

As you can see, the famous prime generator is not even the Eratostenes' sieve, but a simple N^2 divisor counting computation.

skruger today at 3:19 PM
A more concise intro to APL for the modern era: https://xpqz.github.io/learnapl

(author)

meken today at 2:42 PM
I had a little excursion into Dyalog APL recently and wound up writing an emacs mode to evaluate Dyalog APL [1]. It was a pretty nice experience using Claude to extract the small subset of features I wanted from gnu-apl-mode [2] to work with Dyalog APL.

I’d really like to properly get into APL though. My plan is to solve a bunch of problems on Kattis [3].

I'm really enjoying this way of learning a new language in the age of LLMs - starting with easy problems on an online code judge website and work with an LLM to come up with/explain simple solutions. It gives me dopamine hits, lots of reps, allows me to start coding right away, and is a nice way to slowly ramp up difficulty and get practice with different features of the language.

[1] https://github.com/ebanner/dyalog-mode

[2] https://github.com/lokedhs/gnu-apl-mode

[3] https://open.kattis.com

raghavchamadiya today at 12:42 PM
Nice to see this getting the Jupyter Notebook treatment. The original book was already one of the better introductions to APL. Interactive examples make a huge difference for a language where half the learning curve is just building muscle memory with the symbols
twoodfin today at 2:36 PM
pjmlp today at 12:54 PM
I have no use for APL, yet this looks like a great bookmark for rainy days.
Pay08 today at 2:37 PM
How useful would learning APL be for writing less strictly array-based languages like Matlab?
UltraSane today at 1:07 PM
I really wish learning this had a positive RoI