Once you get past the initial learning curve, array algorithms are a wonderfully natural way to think about problem solving. The toolkit you get with APL or K is compact but capable of concisely solving a shocking range of problems. Most of the functional languages I've played with aren't half as effective, even with a much larger standard library.
Personally, I feel the "recursion is the only way to iterate" purity is practically harmful, even though it is quite elegant for theory.
K/J/Q/APL2 and friends[0] have isolated iterative constructs that cover IME 98% of what's needed (each, fold, scan, fixed point, ...) in a way that's just as simple to analyze as recursion[1]. These languages do like DSLish for the first 10 or 20 examples you see - but by the 200th example, it is clear the domain it is specific to is "mostly everything"
[0] I'm not considering APL1 as part of the modern family - it had Fortran-style computed gotos for control flow.
[1] Although there's about 10 times as many of them, so it's not quite as elegant.
I use k/q to read HN, sort of like RSS. I'm a kdb+ novice but am determined to master it someday. This is a way for me to keep using k/q every day and build familiarity.
Short version: K is a tight, fast exercise in minimalism. It takes after Scheme a bit more than most other APLs. Good at dealing with "ragged" and mixed-type data. J is a larger language with more "batteries included". It keeps the traditional APL emphasis on uniform, rectangular data and has a number of advanced features.
12 comments
[ 2.9 ms ] story [ 22.6 ms ] threadK/J/Q/APL2 and friends[0] have isolated iterative constructs that cover IME 98% of what's needed (each, fold, scan, fixed point, ...) in a way that's just as simple to analyze as recursion[1]. These languages do like DSLish for the first 10 or 20 examples you see - but by the 200th example, it is clear the domain it is specific to is "mostly everything"
[0] I'm not considering APL1 as part of the modern family - it had Fortran-style computed gotos for control flow.
[1] Although there's about 10 times as many of them, so it's not quite as elegant.
Good hunting!
[1] https://github.com/kevinlawler/kona
[2] https://github.com/JohnEarnest/ok