Depth-first search in APL
Why Hacker News recommends it
HN commenters call it a beautiful, brilliant demonstration of APL's expressiveness and a model of clear narration.
What it is
John Scholes builds a depth-first tree-search operator step by step in a Dyalog APL session. It covers higher-order functions and runs the search on the N-Queens problem.
Recommended by 2 HN commenters across 3 different months, 2019 to 2021.
What Hacker News said
Strong rec geocar · 2019-07 · on “Non-English-based programming languages”
APL is great. If you haven't seen them, the late John Scholes did a number of absolutely beautiful demonstrations programming in APL[1], [2], [3]. [1]: [this video] [2]: [LINK] [3]: [LINK]
Strong rec paliilap · 2019-08 · on “J can look like APL or English”
That 1975 APL demonstration is lovely. Much has been preserved in Dyalog and GNU APL - it's very interesting to see how timeless the core APL functions are. I'm very fond of a number of videos by the late John Scholes narrating APL solutions step by step, including the well-known demonstration of Conway's Game of Life in APL (0). His videos on depth-first search (1) and solving sudoku (2) are also brilliant. (0) [LINK] (1) [this video] (2) [LINK]
Strong rec geocar · 2021-12 · on “Show HN: KatLang – Language for Calculations”
You might like looking at how Dyalog handles higher-order functions; John Scholes really put this beautiful presentation together about using them as a depth-first search reusable function [this video] and if you haven't seen it, you should!
Cites jodrellblank · 2019-05 · on “A final proposal for Rust await syntax”
> Note also that you're being unfair to Python. List comprehensions, array index notation, and numpy methods cover pretty much everything you've mentioned in apl. All of that to cover ~ten symbols. Is it unfair to Python to point out that this is a huge difference in complexity that someone needs to learn to be able to do those things from scratch? > Which brings me back to what I said before: if I want a powerful array manipulation dsl, I still have it, but I'm not limited by it. Which is fine. It's just that the few operations of array manipulation DSL go so much farther than I expected they would. I do know that APL is not going to be the language to implement WireShark or Halo vNext. The
Cites geocar · 2019-12 · on “Bryan Cantrill interviews Arthur Whitney (2009)”
If you have cycles in your graph, you can build a tree out of a vector of indices, or as a table of parent/child node keys. The former is what John Scholes does[1], and the latter has plenty of common SQL examples. [1]: [this video] If you have a non-cyclic tree (e.g. a 256-trie) you can nest it directly: @/ will traverse to nodes, and COW keeps updates from trashing memory too much. However trees are rarely the best data structure: Binary search on a sorted list can beat b-trees simply because the end of the search will already be in cache, so for a routing table of IP address ranges, I use something like: ipStart where ipStart bin x