Mini APL in Python Language Experiment. Uses numpy arrays.
Project description
MARPLE
MARPLE is an experimental APL interpreter that runs on Linux. It already has enough features to be usable, though may more are planned.
It was inspired by Rodrigo Girão Serrão's RGSPL and Iverson's Dictionary of APL. It has taken some additional features from Dyalog APL(TM).
Marple is written in Python and uses numpy for array operations.
I designed the interpreter and directed its development, but all the code, all the tests and almost all of the documentation have been generated by Claude code. So far the development has taken 8 days.
Project status (April 2026): MARPLE is in the middle of a substantial internal cleanup. The scalar storage convention was migrated to align numpy data shape with APL shape, and the post-char-migration primitive sweep — decode (
⊥), encode (⊤), monadic and dyadic transpose (⍉) — has just been completed, along with several missing pieces (zilde⍬, commute⍨). Ongoing work includes other missing operators (⍥,@,⌸,⌺) and test file reorganisation. Seeplan/post-scalar-cleanup.mdfor the open TODO list and the latestplan/progress-*.mdfile for recent activity. Expect the API surface to be stable but the internals to keep moving for a while yet.
While MARPLE has extensive automated tests, it is not and will never be a commercial strength APL. If that's what you want, get Dyalog APL. Dyalog APL is free for non-commercial work
See the full feature list, architecture, and documentation.
Platform support
MARPLE is developed and tested on Linux. It does not currently run on Windows or Mac.
Quick start
Install uv if you don't have it, then:
git clone https://github.com/romilly/marple.git
cd marple
uv venv
source venv/bin/activate
uv pip install -r requirements.txt
marple
MARPLE v0.6.17 - Mini APL in Python
CLEAR WS
⍳5
1 2 3 4 5
+/⍳100
5050
fact←{⍺←1 ⋄ ⍵=0:⍺ ⋄ (⍺×⍵)∇ ⍵-1}
fact 20
2432902008176640000
PRIDE Web IDE
From within the virtual environment:
python -m marple.web.server
Open http://localhost:8888/ in your browser.
PRIDE features
- a clickable language bar for APL glyph input
- workspace panel,
- session with system commands,
- session save/load, and
- interactive ⎕/⍞ input.
Jupyter Notebook
uv pip install marple-lang[jupyter]
marple-jupyter-install
jupyter notebook
Select MARPLE (APL) as the kernel.
Running scripts
marple examples/01_primitives.marple
See the demo videos, a demo of Bob Smith's partition functions, )load part_fns, and Conway's Game of Life example.
APL character input
Dyalog keyboard layout (recommended)
On Linux with an extended keyboard (with a Windows/Super key), run:
./scripts/aplkeys.sh
This configures the Dyalog APL keyboard layout using setxkbmap. Hold the Windows key (Super) to type APL glyphs; hold Shift+Windows for the extended set. Each key has up to four meanings:
┌────────┐
│~ ⌺ │ top-left: Shifted top-right: Shift+Win
│` ⋄ │ bottom-left: Unshifted bottom-right: Win
└────────┘
Full US layout (see Dyalog keyboard reference for other layouts):
┌────┬────┬────┬────┬────┬────┬────┬────┬────┬────┬────┬────┬────┬─────────┐
│~ ⌺ │! ⌶ │@ ⍫ │# ⍒ │$ ⍋ │% ⌽ │^ ⍉ │& ⊖ │* ⍟ │( ⍱ │) ⍲ │_ ! │+ ⌹ │Backspace│
│` ⋄ │1 ¨ │2 ¯ │3 < │4 ≤ │5 = │6 ≥ │7 > │8 ≠ │9 ∨ │0 ∧ │- × │= ÷ │ │
├────┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬──────┤
│Tab │Q │W │E ⍷ │R │T ⍨ │Y │U │I ⍸ │O ⍥ │P ⍣ │{ ⍞ │} ⍬ │| ⊣ │
│ │q ? │w ⍵ │e ∊ │r ⍴ │t ~ │y ↑ │u ↓ │i ⍳ │o ○ │p * │[ ← │] → │\ ⊢ │
├───────┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴──────┤
│Caps │A │S │D │F ⍛ │G │H │J ⍤ │K ⌸ │L ⌷ │: ≡ │" ≢ │Enter │
│Lock │a ⍺ │s ⌈ │d ⌊ │f _ │g ∇ │h ∆ │j ∘ │k ' │l ⎕ │; ⍎ │' ⍕ │ │
├────────┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─┴──────────┤
│Shift │Z ⊆ │X │C │V │B │N │M │< ⍪ │> ⍙ │? ⍠ │Shift │
│ │z ⊂ │x ⊃ │c ∩ │v ∪ │b ⊥ │n ⊤ │m | │, ⍝ │. ⍀ │/ ⌿ │ │
├───────┬─────┬──────┬──────────────────────────┬──────┬──────┬─────┬──────┤
│Ctrl │Win │Alt │ Space bar │Alt Gr│Win │Menu │Ctrl │
└───────┴─────┴──────┴──────────────────────────┴──────┴──────┴─────┴──────┘
PRIDE language bar
In the PRIDE web IDE, you can click glyphs in the language bar at the top of the screen. No keyboard setup required.
System commands
| Command | Action |
|---|---|
)off |
Exit |
)clear |
Clear workspace |
)wsid [name] |
Show or set workspace ID |
)save [name] |
Save workspace |
)load name |
Load workspace |
)lib |
List saved workspaces |
)drop name |
Delete a saved workspace |
)fns [ns] |
List defined functions |
)ops [ns] |
List defined operators |
)vars |
List defined variables |
Development
uv pip install -r requirements-test.txt
pytest # fast tests (~1.2s)
pytest -m slow # PRIDE, WebSocket, deep TCO, ⎕DL tests
pyright src/
References
- RGSPL — Rodrigo Girão Serrão's Python APL interpreter (design reference)
- RGSPL blog series — step-by-step interpreter build
- Iverson's Dictionary of APL — the rank operator and leading-axis theory
- Language spec — full APL reference and roadmap
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file marple_lang-0.8.0.tar.gz.
File metadata
- Download URL: marple_lang-0.8.0.tar.gz
- Upload date:
- Size: 86.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a18107eb56ac550909db7c2613b0cd15822ac92ea5dba02d76880dab2d2f2440
|
|
| MD5 |
94f4d3a9973eabcbea7250c5061e1ef4
|
|
| BLAKE2b-256 |
3628f1764b4616e2b5e9f06cb334c616ab27247f4e587a07bb5ef0276580611c
|
File details
Details for the file marple_lang-0.8.0-py2.py3-none-any.whl.
File metadata
- Download URL: marple_lang-0.8.0-py2.py3-none-any.whl
- Upload date:
- Size: 93.6 kB
- Tags: Python 2, Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7b1355cd215f131509bc94b393eb72ae95af2c237667b0913370a275bd270544
|
|
| MD5 |
5a784cb27813e413dd1b3a3e28d8b3d3
|
|
| BLAKE2b-256 |
9bfd591ebda822d7fca9e0692cca2dea39aef2151a3d6c51a454e2c762cd8d4c
|