This is a collection of idioms and small programs in APL, J, BQN, Julia, R, NumPy, Nial, Futhark & SaC.
There are several sites that do these kinds of comparisons:
General | Array Language Specific | Array Library Specific |
---|---|---|
Rosetta Code | BQN-Dyalog Dictionary | ArrayFire-MATLAB-NumPy |
Programming-Idioms | BQN-Dyalog Dictionary | ArrayFire-Eigen |
J-Dyalog APL Rosetta | ArrayFire-Numpy | |
Q-APL Dictionary | MatX-MATALB-NumPy |
Language | 💲 | Main Website | Help / Docs | Online REPL | |
---|---|---|---|---|---|
💚 | Dyalog APL | dyalog.com | Dyalog Help | TryAPL | |
💚 | J | jsoftware.com | J NuVoc | J Playground | |
💚 | BQN | mlochbaum.github.io/BQN | BQN Docs | BQNPAD | |
💚 | Q | 💲 | code.kx.com/q | Q Ref | 🚫 |
💙 | Julia | julialang.org | Julia Docs | Replit | |
💙 | MATLAB | 💲 | mathworks.com/products/matlab.html | MATLAB Help | 💲 |
💙 | NumPy* | numpy.org | NumPy Docs | Replit | |
💙 | R | r-project.org | R Docs | JDoodle | |
💜 | Nial | nial-array-language.org | Nial Dictionary | TIO | |
💜 | Futhark | futhark-lang.org | Futhark Docs | 🚫 | |
💜 | Ivy | pkg.go.dev/robpike.io/ivy | Ivy Docs | 🚫 | |
💜💗 | SaC | sac-home.org | SaC Docs | 🚫 | |
💗 | ArrayFire* | arrayfire.com | ArrayFire Docs | 🚫 | |
💗 | MatX* | nvidia.github.io/MatX | MatX API Ref | 🚫 | |
💗 | ATen* | - | ATen Docs | 🚫 | |
💗 | Eigen* | eigen.tuxfamily.org | Eigen Dox | Godbolt |
* Library, not an actual language
- 💚 Main (APL-Family) Array Languages
- 💙 Main (Non-APL-Family) Array Languages
- 💜 Fringe Array Languages
- 💗 Array Compiler Backends / Array Libraries
- REPL
- Index Base
- Axis/Rank Model
LA
= Leading AxisTA
= Trailing AxisAA
= Axis Agnostic
- Application Model
()
= ParenthesesLR
= Left to RightRL
= Right to Left
- Row-major or Column-Major
1 | 2 | 3 | 4 | 5 | |
---|---|---|---|---|---|
APL | 💚 | 1 (or ⎕IO ) |
LA /TA |
RL |
Row |
J | 💚 | 0 | LA |
RL |
Row |
BQN | 💚 | 0 | LA |
RL |
Row |
Q | 💛 | 0 | 🚫 | RL |
Row |
Julia | 💚 | 1 | AA |
() |
Column |
MATLAB | 💚 | 1 | LA |
() |
Column |
NumPy | 💚 | 0 | AA |
() |
Row |
R | 💚 | 1 | AA |
() |
Column |
Nial | 💛 | 1 | AA |
LR |
Row |
Futhark | 💛 | 0 | 🚫 | LR |
Row |
Ivy | 💛 | 1 (or origin ) |
🚫 | RL |
Row |
SaC | 🚫 | 0 | LA |
() |
Row |
ArrayFire | 🚫 | 0 | LA |
() |
Column |
MatX | 🚫 | 0 | LA |
() |
Row |
- Length of Array (Leading Axis)
- Shape of Array
- Rank of Array
- Number of Elements in Array
6 | 7 | 8 | 9 | |
---|---|---|---|---|
APL | ≢ |
⍴ |
⍴⍴ |
×/⍴ |
J | # |
$ |
$$ |
*/@$ |
BQN | ≠ |
≢ |
≢≢ |
×´≢ |
Q | count |
🚫 | 🚫 | count raze |
Julia | size(a, 1) |
size(a) |
ndims(a) |
length(a) |
MATLAB | length(a) |
size(a) |
rank(a) |
numel(a) |
NumPy | len(a) |
a.shape |
np.ndim(a) |
a.size |
R | dim(a)[1] |
dim(a) |
length(dim(a)) |
length(a) |
Nial | first shape |
shape |
valence |
tally |
Futhark | length |
🚫 | 🚫 | flatten |> length |
Ivy | 1 take rho |
rho |
rho rho |
rho , |
SaC | shape(a)[0] |
shape(a) |
shape(shape(a)) |
prod(shape(a)) |
ArrayFire | a.dims()[0] |
a.dims() * |
a.numdims() * |
a.elements() |
MatX | a.Shape()[0] |
a.Shape() |
a.Rank() |
TotalSize(a) |
💛 Means the REPL has certain limitations
- Q REPL has no HOME, END, or any arrows (CTRL or not)
- Nial REPL has no CTRL left or right arrow
- Futhark REPL has no HOME, END, or DEL
If you are using Q, Nial, Futhark or other languages with REPL limitations, you can get around this by invoking with rlwrap
. On Linux using the Q REPL:
sudo apt install rlwrap
rlwrap taskset -c 0 ./q
Note that even when using rlwrap
, some of the limitations will remain (such as CTRL + arrows).
- Creating an Identity Matrix
- Creating an Iota Matrix
- Reversing a Matrix Row-wise, Column-wise and in Memory
- Summing a Matrix Row-wise, Column-wise and Down to a Scalar
- 💚 = All solutions complete
- 💛 = Some solutions missing
Language | 1a | 1b | 2 | 3 | 4 | 5 | 6 |
---|---|---|---|---|---|---|---|
APL | 💚 | 🚫 | 💚 | 💚 | 💚 | 💚 | 💚 |
J | 💚 | 🚫 | 💚 | 💚 | 💚 | 💚 | 💚 |
BQN | 💚 | 💚 | 💚 | 💚 | 💚 | 💚 | 💚 |
Q | 💚 | 💚 | 💚 | 💚 | 💚 | 💚 | 💚 |
Julia | 🚫 | 💚 | 💚 | 🚫 | 💚 | 💚 | 💚 |
MATLAB | 🔜 | 🚫 | 💚 | 🚫 | 💚 | 💚 | 💚 |
NumPy | 💚 | 💚 | 💚 | 🚫 | 💚 | 💚 | 💚 |
R | 🔜 | 💚 | 💚 | 🔜 | 💚 | 💚 | 💚 |
Nial | 💚 | 🚫 | 💚 | 💚 | 💚 | 💚 | 💚 |
Futhark | 🔜 | 💚 | 💚 | 💚 | 💚 | 💚 | 💚 |
Ivy | 🚫 | 🚫 | 💚 | 💚 | 💚 | 💚 | 💚 |
SaC | 🔜 | 🔜 | 💚 | 🔜 | 💚 | 💚 | 💚 |
ArrayFire | 🔜 | 🔜 | 💚 | 🔜 | 💚 | 💚 | 💚 |
MatX | 🔜 | 🔜 | 💚 | 🔜 | 💚 | 💚 | 🔜 |