April: An APL That Compiles to Common Lisp
github.com
github.com
Like most modern APLs created by "outsiders," April is k-influenced in some of its additions to the language:
https://github.com/phantomics/april#unique-language-features...
It's probably the most portable non-ASCII/touchtype APL interpreter outside of the Javascript ones:
https://github.com/phantomics/april#automatic-installation
(That covers basically every modern system with an MMU, as far as I'm aware.)
I'm not sure if it has a possible audience of both Common Lisp programmers and APL users, or a maximum audience restricted to people who know them both. In any case, it's really cool, even if the collective audience for it is maybe two dozen people.
Out of curiosity, are you part of that audience? And if so, what was your experience playing with it? Is it a good place to get started with APLs or should I look elsewhere?
I wouldn't really say I use Common Lisp (I wrote a few interpreters for a few Lisp dialects as an adolescent, including for CL, but haven't really ever casually used the language itself for anything outside of demonstrating concepts to other programmers).
April is fun to play with, but I wouldn't really recommend it for getting started with APLs. It was missing a few things the last time I played around with it.
The way I'd recommend you learn APL is through J's "Labs" feature, which is effectively an interactive set of lessons inside of the J REPL, written by some amazing people (including KEI himself).
Grab a copy of J (I'd recommend getting a copy from the website, because most distributions I've used package it poorly if at all), then run:
jx 0
After that, you can basically just go along with what it tells you. They're all listed by number, so if you want to come back to the lesson you're on later, just check what the number of it is. You can even search through them: jx ''
will list categories for them, jx 'categoryName'
will list the labs within the category.From there, learning shouldn't be that hard, though learning resources for APL in general still aren't where I'd like them to be.
Imagine doing
(defn average [coll] (j +/ %#))
And have it run at the speed of C :)
(I failed because I didnt have the patience to sort out all the type-casting)
Unlikely; clojure runs on the jvm (or on top of js), and interop with c is slow.
That's a lot of conditions, but it's not completely crazy. :)
There's some support for vectorization in the JVM, e.g. [1, 2], but I suspect it's hit-or-miss.
[1] https://bugs.java.com/bugdatabase/view_bug.do?bug_id=6340864
[2] https://bugs.java.com/bugdatabase/view_bug.do?bug_id=7192383