Glyph reference

Each glyph has a name, which links to its definitions and examples. A function glyph also has a name for its monad, which takes one argument, and for its dyad, which takes two. Operators take functions or arrays and derive functions. Notes flag unusual differences from Dyalog APL. Follow each glyph’s link for details and examples. Each function’s page gives its ranks. An argument of higher rank applies the function to each cell of that rank, as Rank does.

Typing glyphs

The keyboard map shows the Option and Option-Shift bindings, with dead keys outlined in orange.

Hold Alt, which is Option on a Mac, and press the key in the Key column. Keys refer to a US layout. ≤ is Alt-< and ≥ is Alt->, each with Shift held. Where the column shows a second key, release Alt, then press the second key. For example, Alt-o c means Alt-o, then c. You can type a shifted second key without Shift. For example, Alt-q ; types ⍠, the same as Alt-q :. An Alt key that takes a second key types its own glyph when Space or an unlisted key follows. For example, Alt-o then Space gives ○. Backspace or Escape cancels the sequence.

Superscripts start with Alt-6. The second key is a digit, - then a digit, t for ᵀ, or u for ᵘ. Subscripts start with Alt-5. The second key is a digit, - then a digit, or x, j, e or r for the number suffixes ₓ, ⱼ, ₑ and ᵣ. A glyph with no key, such as +, is on an ordinary ASCII key. The arrows are on hjkl. Alt-[ types nothing, because terminals send it as the start of a control sequence. The identifier characters ∆ and ⍙ are Alt-7, and Alt-Minus then 7.

The names in these tables are the ones you type. In the REPL, a backtick and any of them, then Tab, enters the glyph, as named entry describes. Python exports the function names, with _ in place of - and a trailing _ on Python keywords, as in index_of and and_. It spells operators as properties with their names, as in f.reduce.

Functions

Glyph Key Monad Dyad Note
+ plus conjugate add Character offsets as BQN
- minus negate subtract Character difference as BQN
× times Alt-m sign multiply
÷ obelus Alt-u reciprocal divide Exact rationals as J
⌊ downstile Alt-d floor minimum ⌊/⍬ is ∞
⌈ upstile Alt-s ceiling maximum ⌈/⍬ is ¯∞
\| stile magnitude residue
* star exponential exponent
⍟ circle-star Alt-o 8 natural-log logarithm
○ circle Alt-o cis circular Pi-times is π. Codes 0 to 8, inverted by k○⁻¹
π pi Alt-p pi-times pi-ratio
√ radical Alt-3 sqrt root As BQN’s √
! exclamation factorial binomial
⍭ stile-tilde Alt-Backslash prime prime-mode Like J’s p:, with different codes
⨸ circle-divide Alt-o u factors factor-spec As J’s q:
⌻ quad-jot Alt-q t roots polyval As J’s p., but coefficients come from ⌻⁻¹
¿ inverted-question Alt-/ roll deal Dyalog’s ?
∨ vee Alt-9 real-imag or Monad as J’s +.
∧ wedge Alt-0 polar and Monad as J’s *.
⊼ wedge-bar Alt-Minus 0 square nand Monad as J’s *:
⊽ vee-bar Alt-Minus 9 double nor Monad as J’s +:
~ tilde not without Major cells, as BQN
= equals classify equal Monad as J
≠ not-equals Alt-Shift-= unique-mask not-equal
< less-than sort-up less Monad sorts major cells
≤ less-than-or-equal Alt-< decrement less-equal Monad as J’s <:
> greater-than sort-down greater Monad sorts major cells
≥ greater-than-or-equal Alt-> increment greater-equal Monad as J’s >:
≡ equal-underbar Alt-= depth match Unsigned depth, as APL2/BQN
≢ equal-underbar-slash Alt-= / tally not-match
⍴ rho Alt-r shape reshape Rank-0 reshape encloses
, comma ravel catenate
⍪ comma-bar Alt-Minus , table catenate-first
⌽ circle-stile Alt-2 reverse rotate
⊖ circle-bar Alt-o Minus reverse-first rotate-first
⍉ circle-backslash Alt-o Backslash transpose reorder-axes
↑ up-arrow Alt-k first take Monad takes first major cell
↓ down-arrow Alt-j split drop
↕ up-down-arrow Alt-k j pairs windows Monad is 2↕; dyad as BQN’s ↕, plus movement/padding
⊂ left-shoe Alt-z enclose partitioned-enclose Encloses atoms; partitions first axis
⊆ left-shoe-underbar Alt-Minus z nest partition Partitions first axis
⊃ right-shoe Alt-x mix pick Monad as Dyalog ⎕ML≥2; pick cells or keys
⌷ squad Alt-q Backslash materialise index Negative indices; ∞/¯∞ select/reverse axis
⍳ iota Alt-i indices index-of Axis selectors; negative lengths count down
↦ right-arrow-from-bar Alt-l range to Counts up or down from 1, ¯1 or X to Y; not Dyalog’s branch
: colon unkey keyed Axis keys
⍸ iota-underbar Alt-Minus i where interval-index Dyad as BQN’s ⍋
∊ epsilon Alt-e enlist member Major cells, as BQN
∪ down-shoe Alt-v unique union Major cells, as BQN
∩ up-shoe Alt-c duplicates intersection Major cells, as BQN
⍷ epsilon-underbar Alt-Minus e groups find Monad as Dyalog’s {⊂⍵}⌸
⍋ delta-stile Alt-Backslash 7 grade-up grade-up-by
⍒ del-stile Alt-Backslash g grade-down grade-down-by
# hash runs replicate Dyad as Dyalog’s ⌿; monad run-length encodes, and #⁻¹ decodes
⊤ down-tack Alt-n binary-encode encode Digits on last axis, as J
⊥ up-tack Alt-b binary-decode decode Digits on last axis, as J
⌹ domino Alt-q u matrix-inverse matrix-divide
⊣ left-tack Alt-; same-left left
⊢ right-tack Alt-’ same right
⍎ hydrant Alt-o b execute execute-in X has keys on its first axis, where Dyalog takes a namespace
⍕ thorn Alt-o n format format-spec

Monadic operators

A monadic operator takes one operand, on its left, as in +/. Monad and Dyad name the derived function’s valences. Where both valences do the same thing, one name in the Monad column covers them. In the notes, f and g are functions, and a, n and r are arrays or numbers.

Glyph Key Monad Dyad Note
/ slash reduce f/, along the last axis. A left argument is a seed, as BQN’s ´
⌿ slash-bar Alt-Minus / reduce-first f⌿, along the first axis. Seed as /
\ backslash scan f\, along the last axis. A left argument is a seed. Accumulates LTR as BQN
⍀ backslash-bar Alt-Minus Backslash scan-first f⍀, along the first axis. Seed as \. Accumulates LTR as BQN
¨ diaeresis Alt-1 each f¨
⍨ tilde-diaeresis Alt-1 Backtick self commute f⍨. a⍨ is a constant function
⊗ circle-times Alt-o m outer-product g⊗, as BQN’s ⌜
⌸ quad-equal Alt-q = key f⌸
⇄ right-left-arrows Alt-4 optimize f⇄ searches for the point where f is least, or with "solve":$t, where its residuals are zero. A left argument holds options
∂ partial Alt-f derivative vjp f∂. The dyad takes a cotangent on the left and gives the vector–Jacobian product

Dyadic operators

A dyadic operator takes an operand on each side, as in f⍤1. The columns are as for monadic operators.

Glyph Key Monad Dyad Note
↣ right-tail-arrow Alt-. before f↣g. a↣f binds a left argument. As BQN’s ⊸
↢ left-tail-arrow Alt-, after f↢g. f↢a binds a right argument. As BQN’s ⟜
⍤ jot-diaeresis Alt-1 t rank f⍤r, f⍤g. Rank 0 preserves atom/scalar distinction
∘ jot Alt-t atop f∘g, as BQN’s ∘
⍠ quad-colon Alt-q ; axis f⍠A, f⍠g apply f along named or numbered axes
⍥ circle-diaeresis Alt-1 o over f⍥g
. dot determinant inner-product f.g. The monad is J’s determinant form, u .v. Also array fields and indexing
⍣ star-diaeresis Alt-1 8 power f⍣n iterates or inverts, f⍣∞ finds a fixed point, f⍣g repeats until g, and f⍣[g] keeps the history until g. List counts give history, as J/BQN
⊘ circle-slash Alt-o / valences f⊘g calls f with one argument and g with two, as BQN’s ⊘
⍚ diamond-underbar Alt-Minus Backtick agenda selector⍚cases selects and calls one function, as BQN’s ◶
@ at under f@g, f@a, f@[p] apply f under a selection, positions, mask or transform. As BQN’s ⌾, not Dyalog’s @
⌺ quad-diamond Alt-q Backtick stencil f⌺a, f⌺g

Syntax and literals

Glyph Key Name Note
← left-arrow Alt-h assign Includes modified and selective assignment
(…) parentheses Grouping. With ⋄, a vector of rows: (4⋄4 5) is [[4] [4 5]]
[…] brackets Vectors and arrays: [a b c], [a;b c], [1 2⋄3 4]. One item makes a one-item vector: [x] is ,⊂x
{…} braces Defined function or operator. ; separates its bodies
⍺ alpha, ⍵ omega Alt-a, Alt-w left-argument, right-argument
⍶ alpha-underbar, ⍹ omega-underbar Alt-Minus a, Alt-Minus w left-operand, right-operand
∇ del, ⍢ del-diaeresis Alt-g, Alt-1 g recursion, operator-recursion A dfn’s own function or operator
? question predicate Inside dfns
:: error-guard Error guard inside dfns
⋄ diamond Alt-Backtick separator Separates statements, rows inside brackets, and rows of a vector inside parentheses
⍝ lamp Alt-o c comment
⎕← quad Alt-q io Explicit output. Read alone, the next line of input
• bullet Alt-y system System function prefix
⍬ zilde Alt-Shift-0 empty Empty numeric vector
'…' "…" quote Character and string literals
¯ overbar Alt-Minus negative Negative literal sign
∞ infinity Alt-8 Real infinity
$t $f $n constants True, false and NaN
$e caught error The error a guard’s handler caught
² ⁻¹ ᵀ ᵘ superscript Alt-6 Postfix on the token before it, or after a space on the run before it: x² is x*2, f² is f⍣2, f⁻¹ is the inverse of f, mᵀ is ⍉m, and fᵘ is a scalar holding f
₁ ₋₁ subscript Alt-5 Postfix on the array before it, or after a space on the run before it: v₁ is 1⌷v, v₋₁ is the last major cell, and v₁←5 assigns to that cell

Numbers covers numeric notation, such as ₓ, r, j and e.

System names

System names start with •. System functions lists them.

Index origin: 0. Negative positions and axes count from the end. Comparison tolerance of 64-bit floats: 1E¯14, which •prefs can lower to 0. Narrower floats compare exactly.

Language-wide differences from Dyalog APL

  • Vectors: a bracket list such as [a b c] is a vector. A strand of literals, such as 1 2 3, needs no brackets. [5] is a one-item vector, the same as ,5. Parentheses group: (5) is 5. A scalar holding 5 is ⊂5. Arrays side by side also form a vector: a b is [a b]. (1 2⋄3) is the vector of rows [[1 2] [3]].
  • Runs: outside brackets, spaces group an expression into runs, and each run acts as one token. A run that ends in a function is a train: +/÷≢ is the mean, and 2× is 2↣×. An operator takes the token next to it, so after a run that ends in a dyadic operator, the next run is its right operand: in ⌊@ 10× x, it is 10×.
  • Indexing: brackets are used to write vectors, never to index. Index selects: 0⌷v is the first item of v.
  • Atoms: numbers, characters and functions are atoms, distinct from scalars, as BQN. Enclosing always adds a layer: ⊂3 ≡ 3 is $f.
  • Numbers: bare numbers are approximate. ₓ marks an exact integer, and r or ᵣ an exact rational, as in J: 1ₓ÷3ₓ is 1ᵣ3. Predicates, positions, tally and shape are exact.
  • Agreement: pervasive functions, Each and Rank align leading axes. An axis of length 1 expands to match: 2 3⍴⍳6 + 10 20 is [10 11 12⋄23 24 25].
  • Major cells: ∊ ~ ∪ ∩ compare major cells, N#Y replicates them, N⊂Y and N⊆Y split along the first axis. ⊤ and ⊥ put digits on the last axis, as J.
  • System names: written •name, as BQN, not ⎕NAME. Most Dyalog system functions and variables are not included.
  • Axis keys name data. K:Y evaluates its keys. T.a is "a"⊃T. T.(expr) and T⍎Y evaluate with the keys of T as names.