Digital encoding of APL symbols
The programming language APL uses a number of symbols, rather than words from natural language, to identify operations, similarly to mathematical symbols. Prior to the wide adoption of Unicode, a number of special-purpose EBCDIC and non-EBCDIC code pages were used to represent the symbols required for writing APL.
Character sets[]
Due to its origins on IBM Selectric-based teleprinters, APL symbols have traditionally been represented on the wire using a unique, non-standard character set. In the 1960s and 1970s, few terminal devices existed which could reproduce them, the most popular ones being the IBM 2741 and IBM 1050 fitted with a specific APL print head. Over time, with the universal use of high-quality graphic display, printing devices and Unicode support, the APL character font problem has largely been eliminated.
Character repertoire[]
IBM assigns the following character IDs (GCGIDs) to APL syntax, which are used in the definitions of its code pages.[1][2][3]
GCGID[2] | IBM name[1][3] | Unicode | Notes and other mappings |
---|---|---|---|
SL010000 | Up Stile (APL) | U+2308 ⌈ LEFT CEILING | |
SL020000 | Down Stile (APL) | U+230A ⌊ LEFT FLOOR | |
SL030000 | Del (APL) | U+2207 ∇ NABLA | |
SL040000 | Del Tilde (APL) | U+236B ⍫ APL FUNCTIONAL SYMBOL DEL TILDE | |
SL050000 | Del Stile (APL) | U+2352 ⍒ APL FUNCTIONAL SYMBOL DEL STILE | |
SL060000 | Delta (APL) | U+2206 ∆ INCREMENT | |
SL070000 | Delta Stile (APL) | U+234B ⍋ APL FUNCTIONAL SYMBOL DELTA STILE | |
SL080000 | Circle (APL) | U+25CB ○ WHITE CIRCLE[4][5][6] | This is SM750000 in a non-APL context, for example, in the C0 replacement graphics from code page 437,[7] which code pages 907, 909 and 910 inherit some or all of, retaining SM750000 in the C0 area and also including SL080000 outside of it.[8][9][10] Both map to U+25CB when APL is represented using Unicode characters, although SL080000 can be mapped to U+F890 in IBM's private use area scheme.[11] Compare SL590000 through SL620000 below. |
SL090000 | Circle Stile (APL) | U+233D ⌽ APL FUNCTIONAL SYMBOL CIRCLE STILE | |
SL100000 | Circle Slope (APL) | U+2349 ⍉ APL FUNCTIONAL SYMBOL CIRCLE BACKSLASH | |
SL110000 | Circle Star (APL) | U+235F ⍟ APL FUNCTIONAL SYMBOL CIRCLE STAR | |
SL120000 | Circle Bar | U+2296 ⊖ CIRCLED MINUS | |
SL130000 | Quad Quote (APL) | U+235E ⍞ APL FUNCTIONAL SYMBOL QUOTE QUAD | |
SL140000 | Quad Divide (APL) | U+2339 ⌹ APL FUNCTIONAL SYMBOL QUAD DIVIDE | |
SL150000 | Slash Bar (APL) | U+233F ⌿ APL FUNCTIONAL SYMBOL SLASH BAR | |
SL160000 | Slope Bar (APL) | U+2340 ⍀ APL FUNCTIONAL SYMBOL BACKSLASH BAR | |
SL170000 | Up Caret Tilde (APL) | U+2372 ⍲ APL FUNCTIONAL SYMBOL UP CARET TILDE | |
SL180000 | Down Caret Tilde (APL) | U+2371 ⍱ APL FUNCTIONAL SYMBOL DOWN CARET TILDE | |
SL190000 | Down Tack Jot (APL) | U+234E ⍎ APL FUNCTIONAL SYMBOL DOWN TACK JOT | |
SL200000 | Up Tack Jot (APL) | U+2355 ⍕ APL FUNCTIONAL SYMBOL UP TACK JOT | |
SL210000 | Up Shoe Null (APL) | U+235D ⍝ APL FUNCTIONAL SYMBOL UP SHOE JOT | |
SL220000 | Up Tack (APL) | U+22A4 ⊤ DOWN TACK[a] | |
SL230000 | Down Tack (APL) | U+22A5 ⊥ UP TACK[a] | |
SL240000 | Down Tack Up Tack (APL) | U+2336 ⌶ APL FUNCTIONAL SYMBOL I-BEAM | |
SL250000 | Jot (APL) | U+2218 ∘ RING OPERATOR | |
SL260000 | Left Bracket Right Bracket (APL) | U+2337 ⌷ APL FUNCTIONAL SYMBOL SQUISH QUAD | |
SL270000 | Quad Jot (APL) | U+233B ⌻ APL FUNCTIONAL SYMBOL QUAD JOT | |
SL280000 | Quad Slope (APL) | U+2342 ⍂ APL FUNCTIONAL SYMBOL QUAD BACKSLASH | |
SL290000 | Ampersand Underbar[3] | Not used in any documented code page. Can be represented in Unicode with the sequence U+0026+U0332 &̲ | |
SL300000 | Equal Underbar (APL) | U+2261 ≡ IDENTICAL TO | |
SL310000 | OUT Symbol (APL)[3] | Not used in any documented code page. Reference glyph resembles oblique underlined forms of the letters O, U and T overstruck in the same character position. | |
SL320000 | Diaeresis Dot (APL) | U+2235 ∵ BECAUSE | |
SL330000 | Delta Underbar (APL) | U+2359 ⍙ APL FUNCTIONAL SYMBOL DELTA UNDERBAR | |
SL340000 | Left Tack (APL) | U+22A2 ⊢ RIGHT TACK[a] | |
SL350000 | Right Tack (APL) | U+22A3 ⊣ LEFT TACK[a] | |
SL360000 | Quad (APL) | U+2395 ⎕ APL FUNCTIONAL SYMBOL QUAD[4][5] | U+25AF ▯ WHITE VERTICAL RECTANGLE[3] |
SL370000 | Less Greater (APL) | U+22C4 ⋄ DIAMOND OPERATOR[4][5] | U+25CA ◊ LOZENGE,[3] U+25C6 ◆ BLACK DIAMOND[6][12] |
SL380000 | Stile (APL) | U+2223 ∣ DIVIDES[4][5] | U+2502 │ BOX DRAWINGS LIGHT VERTICAL[6][12] |
SL400000 | Up Shoe (APL) | U+2229 ∩ INTERSECTION[4][5] | U+22C2 ⋂ N-ARY INTERSECTION[12][6] |
SL410000 | Down Shoe (APL) | U+222A ∪ UNION[4][5] | U+22C3 ⋃ N-ARY UNION[12][6] |
SL420000 | Left Shoe (APL) | U+2282 ⊂ SUBSET OF | |
SL430000 | Right Shoe (APL) | U+2283 ⊃ SUPERSET OF | |
SL440000 | Underbar (APL) | U+005F _ LOW LINE | |
SL450000 | Diaeresis (APL) | U+00A8 ¨ DIAERESIS | |
SL460000 | Tilde (APL) | U+223C ∼ TILDE OPERATOR[4][5] | U+F88F in IBM's private use area scheme.[11] Also mapped to U+007E ~ TILDE,[12][6] although SD190000 (U+007E in a non-APL context) co-occurs at 0xA1 (while SL460000 is at 0x80) in code page 213.[13] |
SL480000 | Circle Plus | U+2295 ⊕ CIRCLED PLUS | |
SL490000 | Circle x | U+2297 ⊗ CIRCLED TIMES | |
SL500000 | Down Caret (APL) | U+2228 ∨ LOGICAL OR[12][6][4][5][3] | |
SL510000 | Up Caret (APL) | U+2227 ∧ LOGICAL AND[4][5] | U+22C0 ⋀ N-ARY LOGICAL AND[12][6] |
SL520000 | Less (APL) | U+003C < LESS-THAN SIGN | |
SL530000 | Greater (APL) | U+003E > GREATER-THAN SIGN | |
SL540000 | Divide (APL) | U+00F7 ÷ DIVISION SIGN | |
SL550000 | Times (APL) | U+00D7 × MULTIPLICATION SIGN | |
SL560000 | Not Greater (APL) | U+2264 ≤ LESS-THAN OR EQUAL TO | |
SL570000 | Not Less (APL) | U+2265 ≥ GREATER-THAN OR EQUAL TO | |
SL580000 | Quote Dot (APL) | U+0021 ! EXCLAMATION MARK[12][6][5] | U+F88E in IBM's private use area scheme.[11] SP020000 (U+0021 ! EXCLAMATION MARK in a non-APL context) co-occurs at 0x5A in code page 293 (SL580000 is at 0xDB in code pages 293 and 310).[13] Tachyonsoft lists U+01C3 ǃ LATIN LETTER RETROFLEX CLICK for SL580000.[4] |
SL590000 | Left Arrow (APL) | U+2190 ← LEFTWARDS ARROW[4][5][6] | These arrows are SM300000, SM310000, SM320000 and SM330000 respectively in a non-APL context, for example, in the C0 replacement graphics from code page 437,[7] which code pages 907, 909 and 910 inherit some or all of. Their APL GCGIDs can be mapped to U+F88D, U+F88C, U+F88B and U+F88A respectively in IBM's private use area scheme.[11]
Code pages 907 and 910 keep the non-APL GCGIDs for the C0 replacements but use the APL GCGIDs where the arrows appear outside of the C0 area, while code page 909 uses the APL GCGIDs multiple times, both for the C0 replacements and for between one and two occurrences of each of these arrows outside of the C0 area.[8][9][10] Compare SL080000 above. Duplicating C0 replacement graphics outside of the C0 area is not an uncommon practice in DOS code pages: compare, for example, the pilcrow and section sign in code page 850. |
SL600000 | Right Arrow (APL) | U+2192 → RIGHTWARDS ARROW[4][5][6] | |
SL610000 | Up Arrow (APL) | U+2191 ↑ UPWARDS ARROW[4][5][6] | |
SL620000 | Down Arrow (APL) | U+2193 ↓ DOWNWARDS ARROW[4][5][6] | |
SL630000 | Overbar (APL) | U+203E ‾ OVERLINE | |
SL640000 | Slope (APL) | U+005C \ REVERSE SOLIDUS[12][6][5] | U+F889 in IBM's private use area scheme.[11] Also mapped to U+2216 ∖ SET MINUS.[4] SM070000 (U+005C \ REVERSE SOLIDUS in a non-APL context) co-occurs at 0x5A (while SL640000 is at 0xB7) in code page 293.[13] |
SL650000 | Star (APL) | U+22C6 ⋆ STAR OPERATOR[5] | U+002A * ASTERISK[14] |
SL660000 | Quote (APL) | U+0027 ' APOSTROPHE | |
SL670000 | Left Parenthesis (APL) | U+0028 ( LEFT PARENTHESIS | |
SL680000 | Right Parenthesis (APL) | U+0029 ) RIGHT PARENTHESIS | |
SL690000 | Bar (APL) | U+002D - HYPHEN-MINUS[14][5][6] | U+2212 − MINUS SIGN |
SL700000 | Query (APL) | U+003F ? QUESTION MARK | U+F888 in IBM's private use area scheme.[11] |
SL710000 | Alpha (APL) | U+237A ⍺ APL FUNCTIONAL SYMBOL ALPHA[4][5] | U+03B1 α GREEK SMALL LETTER ALPHA[12][6] |
SL720000 | Epsilon (APL) | U+220A ∊ SMALL ELEMENT OF[5][3] | U+03B5 ε GREEK SMALL LETTER EPSILON,[12][6] U+2208 ∈ ELEMENT OF[4] |
SL730000 | Iota (APL) | U+2373 ⍳ APL FUNCTIONAL SYMBOL IOTA[4][5] | U+03B9 ι GREEK SMALL LETTER IOTA[12][6] |
SL740000 | Rho (APL) | U+2374 ⍴ APL FUNCTIONAL SYMBOL RHO[4][5] | U+03C1 ρ GREEK SMALL LETTER RHO[12][6] |
SL750000 | Omega (APL) | U+2375 ⍵ APL FUNCTIONAL SYMBOL OMEGA[4][5] | U+03C9 ω GREEK SMALL LETTER OMEGA[12][6] |
SL760000 | Slash (APL) | U+002F / SOLIDUS | |
SL770000 | Left Bracket (APL) | U+005B [ LEFT SQUARE BRACKET | |
SL780000 | Right Bracket (APL) | U+005D ] RIGHT SQUARE BRACKET | |
SL790000 | Plus (APL) | U+002B + PLUS SIGN | |
SL800000 | Semicolon (APL) | U+003B ; SEMICOLON | |
SL810000 | Equal (APL) | U+003D = EQUALS SIGN | |
SL820000 | Not Equal (APL) | U+2260 ≠ NOT EQUAL TO | |
SL830000 | Colon (APL) | U+003A : COLON[6][5] | Form with fullwidth attribute set (SL830080) is used for 0xA1C3 (i.e. U+2236 ∶ RATIO) in EUC-CN.[15] |
SL840000 | Dot (APL) | U+002E . FULL STOP | |
SL850000 | Comma (APL) | U+002C , COMMA | |
SL860000 | Iota Underbar (APL) | U+2378 ⍸ APL FUNCTIONAL SYMBOL IOTA UNDERBAR | |
SL870000 | Epsilon Underbar (APL) | U+2377 ⍷ APL FUNCTIONAL SYMBOL EPSILON UNDERBAR |
EBCDIC code pages[]
Code page 293[]
Code page 293 (CCSID 293),[16] called "APL (USA)", is an EBCDIC code page which includes APL symbols, in addition to preserving the basic Latin letters and Western Arabic numerals at their usual EBCDIC locations.[13][14]
Code page 293[17][13][14] | ||||||||||||||||
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | A | B | C | D | E | F | |
0x | NUL | SOH | STX | ETX | SEL | HT | RNL | DEL | GE | SPS | RPT | VT | FF | CR | SO | SI |
1x | DLE | DC1 | DC2 | DC3 | RES/ ENP |
NL | BS | POC | CAN | EM | UBS | CU1 | IFS | IGS | IRS | IUS/ ITB |
2x | DS | SOS | FS | WUS | BYP/ INP |
LF | ETB | ESC | SA | SFE | SM/ SW |
CSP | MFA | ENQ | ACK | BEL |
3x | SYN | IR | PP | TRN | NBS | EOT | SBS | IT | RFF | CU3 | DC4 | NAK | SUB | |||
4x | SP |