SHARP APL: Difference between revisions
m (→Releases) |
(→Primitive functions: Show 1987 primitives in the tables: some guessing, but it's better than using SAX, which may have primitives never added to SHARP) |
||
Line 47: | Line 47: | ||
== Primitive functions == | == Primitive functions == | ||
=== | The primitives shown here are those for SHARP APL around 1987, near the end of the decline of [[time-sharing]] APL. Some primitives from [[A Dictionary of APL]] were added after this, including [[Find|In]] (<syntaxhighlight lang=apl inline>⍷</syntaxhighlight>), [[Nubsieve]] (<syntaxhighlight lang=apl inline>≠</syntaxhighlight>), and [[Raze]] (<syntaxhighlight lang=apl inline>↓</syntaxhighlight>), and these appear in [[SAX]]. | ||
=== Scalar === | |||
All scalar functions have rank zero. | All scalar functions have rank zero. | ||
Line 56: | Line 56: | ||
! Glyph !! Monadic !! Dyadic | ! Glyph !! Monadic !! Dyadic | ||
|- | |- | ||
| <syntaxhighlight lang=apl inline>+</syntaxhighlight> || [[Conjugate]] | | <syntaxhighlight lang=apl inline>+</syntaxhighlight> || [[Conjugate]] || [[Addition]] | ||
|- | |- | ||
| <syntaxhighlight lang=apl inline>-</syntaxhighlight> || [[Negate]] | | <syntaxhighlight lang=apl inline>-</syntaxhighlight> || [[Negate]] || [[Subtraction]] | ||
|- | |- | ||
| <syntaxhighlight lang=apl inline>×</syntaxhighlight> || [[Signum]] | | <syntaxhighlight lang=apl inline>×</syntaxhighlight> || [[Signum]] || [[Multiplication]] | ||
|- | |- | ||
| <syntaxhighlight lang=apl inline>÷</syntaxhighlight> || [[Reciprocal]] | | <syntaxhighlight lang=apl inline>÷</syntaxhighlight> || [[Reciprocal]] || [[Division]] | ||
|- | |- | ||
| <syntaxhighlight lang=apl inline>*</syntaxhighlight> || [[Exponential]] | | <syntaxhighlight lang=apl inline>*</syntaxhighlight> || [[Exponential]] || [[Power function|Power]] | ||
|- | |- | ||
| <syntaxhighlight lang=apl inline>⍟</syntaxhighlight> || [[Natural Logarithm]] | | <syntaxhighlight lang=apl inline>⍟</syntaxhighlight> || [[Natural Logarithm]] || [[Logarithm|Base-⍺ Logarithm]] | ||
|- | |- | ||
| <syntaxhighlight lang=apl inline>|</syntaxhighlight> || [[Magnitude]] | | <syntaxhighlight lang=apl inline>|</syntaxhighlight> || [[Magnitude]] || [[Residue]] | ||
|- | |- | ||
| <syntaxhighlight lang=apl inline>!</syntaxhighlight> || [[Factorial]] | | <syntaxhighlight lang=apl inline>!</syntaxhighlight> || [[Factorial]] || [[Binomial]] | ||
|- | |- | ||
| <syntaxhighlight lang=apl inline>⌊</syntaxhighlight> || [[Floor]] | | <syntaxhighlight lang=apl inline>⌊</syntaxhighlight> || [[Floor]] || [[Minimum]] | ||
|- | |- | ||
| <syntaxhighlight lang=apl inline>⌈</syntaxhighlight> || [[Ceiling]] | | <syntaxhighlight lang=apl inline>⌈</syntaxhighlight> || [[Ceiling]] || [[Maximum]] | ||
|- | |- | ||
| <syntaxhighlight lang=apl inline>○</syntaxhighlight> || [[Pi Times]] | | <syntaxhighlight lang=apl inline>○</syntaxhighlight> || [[Pi Times]] || [[Circle functions]] | ||
|- | |- | ||
| <syntaxhighlight lang=apl inline>∧</syntaxhighlight> || | | <syntaxhighlight lang=apl inline>∧</syntaxhighlight> || || [[And]]/[[LCM]] | ||
|- | |- | ||
| <syntaxhighlight lang=apl inline>∨</syntaxhighlight> || | | <syntaxhighlight lang=apl inline>∨</syntaxhighlight> || || [[Or]]/[[GCD]] | ||
|- | |- | ||
| <syntaxhighlight lang=apl inline>⍲</syntaxhighlight> || | | <syntaxhighlight lang=apl inline>⍲</syntaxhighlight> || || [[Nand]] | ||
|- | |- | ||
| <syntaxhighlight lang=apl inline>⍱</syntaxhighlight> || | | <syntaxhighlight lang=apl inline>⍱</syntaxhighlight> || || [[Nor]] | ||
|- | |- | ||
| <syntaxhighlight lang=apl inline>~</syntaxhighlight> || [[Not]] | | <syntaxhighlight lang=apl inline>~</syntaxhighlight> || [[Not]] || | ||
|- | |- | ||
| <syntaxhighlight lang=apl inline>?</syntaxhighlight> || [[Roll]] | | <syntaxhighlight lang=apl inline>?</syntaxhighlight> || [[Roll]] || See [[#Non-Scalar|Non-scalar]] | ||
|- | |- | ||
| <syntaxhighlight lang=apl inline> | | <syntaxhighlight lang=apl inline>=</syntaxhighlight> || || [[Equals]] | ||
|- | |- | ||
| <syntaxhighlight lang=apl inline> | | <syntaxhighlight lang=apl inline>≠</syntaxhighlight> || || [[Not Equals]] | ||
|- | |- | ||
| <syntaxhighlight lang=apl inline> | | <syntaxhighlight lang=apl inline><</syntaxhighlight> || See [[#Non-Scalar|Non-scalar]] || [[Less Than]] | ||
|- | |- | ||
| <syntaxhighlight lang=apl inline> | | <syntaxhighlight lang=apl inline>≤</syntaxhighlight> || || [[Less Than or Equal]] | ||
|- | |- | ||
| <syntaxhighlight lang=apl inline> | | <syntaxhighlight lang=apl inline>≥</syntaxhighlight> || || [[Greater Than or Equal]] | ||
|- | |- | ||
| <syntaxhighlight lang=apl inline> | | <syntaxhighlight lang=apl inline>></syntaxhighlight> || See [[#Non-Scalar|Non-scalar]] || [[Greater Than]] | ||
|} | |} | ||
=== | === Non-scalar === | ||
{| class=wikitable | {| class=wikitable | ||
! Glyph !! Rank !! Monadic | ! Glyph !! Rank !! Monadic !! Ranks !! Dyadic | ||
|- | |- | ||
| <syntaxhighlight lang=apl inline> | | <syntaxhighlight lang=apl inline>⌹</syntaxhighlight> || 2 || [[Matrix inverse]] || ∞ 2 || [[Matrix divide]] | ||
|- | |- | ||
| <syntaxhighlight lang=apl inline> | | <syntaxhighlight lang=apl inline>?</syntaxhighlight> || || See [[#Scalar|Scalar]] || * * || [[Deal]] | ||
|- | |- | ||
| <syntaxhighlight lang=apl inline> | | <syntaxhighlight lang=apl inline>⊤</syntaxhighlight> || || || ∞ ∞ || [[Encode]] | ||
|- | |- | ||
| <syntaxhighlight lang=apl inline> | | <syntaxhighlight lang=apl inline>⊥</syntaxhighlight> || || || ∞ ∞ || [[Decode]] | ||
|- | |- | ||
| <syntaxhighlight lang=apl inline> | | <syntaxhighlight lang=apl inline>≡</syntaxhighlight> || || || ∞ ∞ || [[Match]] | ||
|- | |- | ||
| <syntaxhighlight lang=apl inline> | | <syntaxhighlight lang=apl inline>∊</syntaxhighlight> || || || 0 ∞ || [[Membership]] | ||
|- | |- | ||
| <syntaxhighlight lang=apl inline> | | <syntaxhighlight lang=apl inline>⍳</syntaxhighlight> || 1 || [[Index Generator|Count]] || 1 0 || [[Index Of]] | ||
|- | |- | ||
| <syntaxhighlight lang=apl inline> | | <syntaxhighlight lang=apl inline>⍋</syntaxhighlight> || ∞ || Numeric [[Grade up]] || ∞ ∞ || Character [[Grade up]] | ||
|- | |- | ||
| <syntaxhighlight lang=apl inline> | | <syntaxhighlight lang=apl inline>⍒</syntaxhighlight> || ∞ || Numeric [[Grade down]] || ∞ ∞ || Character [[Grade down]] | ||
|- | |- | ||
| <syntaxhighlight lang=apl inline> | | <syntaxhighlight lang=apl inline>⍴</syntaxhighlight> || ∞ || [[Shape|Shape of]] || 1 ∞ || [[Reshape]] | ||
|- | |- | ||
| <syntaxhighlight lang=apl inline> | | <syntaxhighlight lang=apl inline>↑</syntaxhighlight> || || || 1 ∞ || [[Take]] | ||
|- | |- | ||
| <syntaxhighlight lang=apl inline> | | <syntaxhighlight lang=apl inline>↓</syntaxhighlight> || || || 1 ∞ || [[Drop]] | ||
|- | |- | ||
| <syntaxhighlight lang=apl inline> | | <syntaxhighlight lang=apl inline><</syntaxhighlight> || ∞ || [[Enclose]]/Box || || See [[#Scalar|Scalar]] | ||
|- | |- | ||
| <syntaxhighlight lang=apl inline> | | <syntaxhighlight lang=apl inline>⊃</syntaxhighlight> || || || ∞ ∞ || [[Link]] | ||
|- | |- | ||
| <syntaxhighlight lang=apl inline> | | <syntaxhighlight lang=apl inline>></syntaxhighlight> || 0 || [[Disclose]]/Open || || See [[#Scalar|Scalar]] | ||
|- | |- | ||
| <syntaxhighlight lang=apl inline> | | <syntaxhighlight lang=apl inline>,</syntaxhighlight> || ∞ || [[Ravel]] || ∞ ∞ || [[Catenate]] | ||
|- | |- | ||
| <syntaxhighlight lang=apl inline> | | <syntaxhighlight lang=apl inline>⍪</syntaxhighlight> || ∞ || [[Table]] || ∞ ∞ || [[Catenate First|Catenate-Down]] | ||
|- | |- | ||
| <syntaxhighlight lang=apl inline> | | <syntaxhighlight lang=apl inline>⌽</syntaxhighlight> || 1 || [[Reverse]] || 0 1 || [[Rotate]] | ||
|- | |- | ||
| <syntaxhighlight lang=apl inline> | | <syntaxhighlight lang=apl inline>⊖</syntaxhighlight> || ∞ || [[Reverse First|Reverse-Down]] || ∞ ∞ || [[Rotate First|Rotate-Down]] | ||
|- | |- | ||
| <syntaxhighlight lang=apl inline> | | <syntaxhighlight lang=apl inline>⍉</syntaxhighlight> || ∞ || Monadic [[Transpose]] || 0 ∞ || Dyadic [[Transpose]] | ||
|- | |- | ||
| <syntaxhighlight lang=apl inline> | | <syntaxhighlight lang=apl inline>⊣</syntaxhighlight> || ∞ || [[Stop]] || ∞ ∞ || [[Left Identity|Left]] | ||
|- | |- | ||
| <syntaxhighlight lang=apl inline> | | <syntaxhighlight lang=apl inline>⊢</syntaxhighlight> || ∞ || [[Identity|Pass]] || ∞ ∞ || [[Right Identity|Right]] | ||
|- | |- | ||
| <syntaxhighlight lang=apl inline>⍕</syntaxhighlight> || ∞ || [[Monadic Format]] | | <syntaxhighlight lang=apl inline>⍕</syntaxhighlight> || ∞ || [[Monadic Format]] || * ∞ || [[Dyadic Format]] | ||
|- | |- | ||
| <syntaxhighlight lang=apl inline>⍎</syntaxhighlight> || * || [[Execute]] | | <syntaxhighlight lang=apl inline>⍎</syntaxhighlight> || * || [[Execute]] || || | ||
|} | |} | ||
Revision as of 16:05, 30 January 2024
SHARP APL was an APL implementation offered by I.P. Sharp Associates (IPSA), originally as part of its time-sharing service and later as a stand-alone product. It was split off from STSC's APL*PLUS, which until then had been sold jointly by the two companies. SHARP APL was the source of many developments in flat array theory, driven by Ken Iverson and other APL designers at IPSA.
Releases
A partial list of SHARP's major releases is shown.
Number | Released | Features |
---|---|---|
1980 | Compress extended to Replicate; LCM and GCD; Grade on rank >1[1] | |
1981-05 | Enclosed arrays; Enclose (< ), Disclose (> ), Match (≡ ); operators Over (⍤ ), On (⍥ ), With (¨ ); complex numbers[2]
| |
1982-05 | Generalized determinant (. ); debugging and formatting improvements[3]
| |
1982-11 | Complex Floor, Ceiling, and Residue; reference-counted implementation[4] | |
15 | 1983-05 | Rank operator and Function rank; Lev (⊣ ), Dex (⊢ ), Link (⊃ )[5]
|
17 | 1985-01[6] | |
19 | 1987-03 | Short left argument for Take/Drop[7] |
20 | 1989-09 | In (⍷ ), Nubsieve (≠ ), Raze (↓ ); padding for Disclose (> )[8]
|
Primitive functions
The primitives shown here are those for SHARP APL around 1987, near the end of the decline of time-sharing APL. Some primitives from A Dictionary of APL were added after this, including In (⍷
), Nubsieve (≠
), and Raze (↓
), and these appear in SAX.
Scalar
All scalar functions have rank zero.
Glyph | Monadic | Dyadic |
---|---|---|
+ |
Conjugate | Addition |
- |
Negate | Subtraction |
× |
Signum | Multiplication |
÷ |
Reciprocal | Division |
* |
Exponential | Power |
⍟ |
Natural Logarithm | Base-⍺ Logarithm |
| |
Magnitude | Residue |
! |
Factorial | Binomial |
⌊ |
Floor | Minimum |
⌈ |
Ceiling | Maximum |
○ |
Pi Times | Circle functions |
∧ |
And/LCM | |
∨ |
Or/GCD | |
⍲ |
Nand | |
⍱ |
Nor | |
~ |
Not | |
? |
Roll | See Non-scalar |
= |
Equals | |
≠ |
Not Equals | |
< |
See Non-scalar | Less Than |
≤ |
Less Than or Equal | |
≥ |
Greater Than or Equal | |
> |
See Non-scalar | Greater Than |
Non-scalar
Glyph | Rank | Monadic | Ranks | Dyadic |
---|---|---|---|---|
⌹ |
2 | Matrix inverse | ∞ 2 | Matrix divide |
? |
See Scalar | * * | Deal | |
⊤ |
∞ ∞ | Encode | ||
⊥ |
∞ ∞ | Decode | ||
≡ |
∞ ∞ | Match | ||
∊ |
0 ∞ | Membership | ||
⍳ |
1 | Count | 1 0 | Index Of |
⍋ |
∞ | Numeric Grade up | ∞ ∞ | Character Grade up |
⍒ |
∞ | Numeric Grade down | ∞ ∞ | Character Grade down |
⍴ |
∞ | Shape of | 1 ∞ | Reshape |
↑ |
1 ∞ | Take | ||
↓ |
1 ∞ | Drop | ||
< |
∞ | Enclose/Box | See Scalar | |
⊃ |
∞ ∞ | Link | ||
> |
0 | Disclose/Open | See Scalar | |
, |
∞ | Ravel | ∞ ∞ | Catenate |
⍪ |
∞ | Table | ∞ ∞ | Catenate-Down |
⌽ |
1 | Reverse | 0 1 | Rotate |
⊖ |
∞ | Reverse-Down | ∞ ∞ | Rotate-Down |
⍉ |
∞ | Monadic Transpose | 0 ∞ | Dyadic Transpose |
⊣ |
∞ | Stop | ∞ ∞ | Left |
⊢ |
∞ | Pass | ∞ ∞ | Right |
⍕ |
∞ | Monadic Format | * ∞ | Dyadic Format |
⍎ |
* | Execute |
Primitive Operators
Glyph | Operands | Ranks | Monadic Call | Dyadic Call | ||
---|---|---|---|---|---|---|
/ |
f |
∞ |
Reduce | |||
⌿ |
f |
∞ |
Reduce-down | |||
\ |
f |
∞ |
Scan | |||
⍀ |
f |
∞ |
Scan-down | |||
/ |
m |
∞ |
Copy/Compress | |||
⌿ |
m |
∞ |
Copy-down/Compress-down | |||
\ |
m |
∞ |
Expand | |||
⍀ |
m |
∞ |
Expand-down | |||
⊂ |
f |
∞ |
rf lf |
Swap | ||
& |
f |
∞ |
∞ ∞ |
Select | ||
⍤ |
f |
g |
mg |
mg mg |
On (close Over) | |
⍤ |
f |
n |
n |
n n |
Rank | |
⍤ |
m |
g |
mg |
mg mg |
Cut | |
⍥ |
f |
g |
mg |
mg mg |
Upon (close Atop) | |
¨ |
f |
g |
mg |
mg mg |
Under | |
¨ |
m |
g |
mg |
With (Bind) | ||
¨ |
f |
n |
mf |
|||
. |
f |
g |
2 |
∞ ∞ |
Alternant | Inner-product |
. |
m |
g |
∞ ∞ |
Tie, Outer-product | ||
. |
f |
m |
mf |
Ply |
Implementation
Numeric types
SHARP originally supported only real numbers using double (8-byte) precision. Numbers were stored in one of three types:
- Boolean, with one bit per value
- Integer, with four bytes per value
- Floating, with eight bytes per value
SATN-40 describes the addition of complex numbers to SHARP APL.
SHARP APL Technical Notes
Features of SHARP APL were documented in "technical notes" issued by IPSA. These notes are numbered following the scheme "SATN-0". Earlier notes typically had no author listed. A pdf collection of SHARP APL Technical Notes is hosted at jsoftware.com, as are html transcriptions of some notes, linked in the table below.
Number | Issued | Revised | Author | Title | |
---|---|---|---|---|---|
0 | 1976-01-01 | SATN Introduction | |||
1 | 1976-01-01 | TASKID | |||
2 | 5 | 1979-02-14 | Control Messages | ||
3 | 1976-01-01 | ⎕OUT | |||
4 | 2 | 1978-04-01 | N-tasks and B-tasks | ||
5 | 2 | 1978-08-01 | Batch APL | ||
6 | 1976-01-01 | Execute | |||
7 | 1976-01-01 | Latent Expression | |||
8 | 2 | 1978-03-01 | HSPRINT | ||
9 | 1 | 1979-08-01 | John D. Burger | Usage Inquiry System | |
10 | 2 | 1978-06-01 | SORTREQ | ||
11 | 1976-01-01 | )RESET | |||
12 | 1976-01-01 | )COPY | |||
13 | 1978-03-10 | Early Warnings | |||
14 | 2 | 1978-08-15 | Package - A New Variable Type | ||
15 | Index | ||||
16 | 1976-04-20 | File System Must-Write Buffers | |||
17 | 1976-06-01 | Formatting Primitive | |||
18 | 1976-07-01 | ⎕FMT | |||
19 | 1977-01-01 | Fileprint | |||
20 | 4 | 1978-06-01 | System Variables, Session Variables and System Functions | ||
21 | 1 | 1978-06-01 | ⎕WS and ⎕FD | ||
22 | 2 | 1979-01-01 | Bob Bernecky and Mike Symes | APL Worspace Transfer | |
23 | 1977-06-10 | 1 | 1978-07-15 | Bob Bernecky | Comparison Tolerance (web) |
24 | 1977-03-23 | Symbol Table | |||
25 | 1977-05-15 | Extensions to Argument Passing | |||
26 | 1977-09-10 | Enhancements to the File System | |||
28 | 1977-07-11 | Terminal Control | |||
29 | 1978-06-15 | System Time and Timestamps | |||
30 | 1979-01-01 | Numeric Display | |||
31 | 1979-02-01 | Line Editing in SHARP APL | |||
32 | 1979-03-30 | Shared Variables | |||
33 | 1979-03-26 | Event Trapping | |||
34 | 1980-08-15 | Bob Bernecky | Replication | ||
35 | 1980-08-15 | Peter Wooster | Extended Upgrade and Downgrade | ||
36 | 1980-04-20 | Ken Iverson | Direct Definition | ||
37 | 1 | 1982-06-01 | John D. Burger | IBM 3270 User Guide | |
39 | 1981-06-01 | Richard Lathwell | The SHARP APL S-task Interface | ||
40 | 1981-06-20 | Eugene McDonnell | Complex Numbers (web) | ||
41 | 1981-06-20 | Ken Iverson | Composition and Enclosure (web) | ||
42 | 1982-04-01 | Ken Iverson | Determinant-Like Functions Produced by the Dot-Operator (web) | ||
43 | 1982-11-05 | Peter Wooster | Improved Display for Enclosed Arrays and a New System Variable ⎕PS | ||
44 | 1983-04-02 | Robert C. Metzger | Enhancements to Event Handling | ||
45 | 1983-05-02 | Various | Language Extensions of May 1983 | ||
46 | 1983-08-05 | Eric Iverson | Enhancements Provided in Update #1 to the May 1983 Release of SHARP APL | ||
47 | 1983-10-01 | Mike Symes | IBM 3270 User Guide (IDSH) | ||
48 | 1983-11-30 | John D. Burger | Workspace 1 HCPRINT |
References
- ↑ IPSA. SHARP APL Reference Manual Additions and Corrections, June 1981
- ↑ IPSA Newsletter July/August 1981 (pdf)
- ↑ IPSA Newsletter July/August 1982 (pdf)
- ↑ IPSA Newsletter November/December 1982 (pdf)
- ↑ "Language Extensions of May 1983". SATN-45, 1983-05-02.
- ↑ York University Computer Museum. SHARP APL collection catalogue.
- ↑ Robert Bernecky. An Introduction to Function Rank at APL88. APL Quote Quad, Volume 18, Issue 2. December 1987.
- ↑ IPSA. "SHARP APL Release 20.0: Guide for APL Programmers".
APL dialects [edit] | |
---|---|
Maintained | APL+Win ∙ APL2 ∙ APL64 ∙ APL\iv ∙ Aplette ∙ April ∙ Co-dfns ∙ Dyalog APL ∙ Dyalog APL Vision ∙ dzaima/APL ∙ GNU APL ∙ Kap ∙ NARS2000 ∙ Pometo ∙ TinyAPL |
Historical | A Programming Language ∙ A+ (A) ∙ APL# ∙ APL2C ∙ APL\360 ∙ APL/700 ∙ APL\1130 ∙ APL\3000 ∙ APL.68000 ∙ APL*PLUS ∙ APL.jl ∙ APL.SV ∙ APLX ∙ Extended Dyalog APL ∙ Iverson notation ∙ IVSYS/7090 ∙ NARS ∙ ngn/apl ∙ openAPL ∙ Operators and Functions ∙ PAT ∙ Rowan ∙ SAX ∙ SHARP APL ∙ Rationalized APL ∙ VisualAPL (APLNext) ∙ VS APL ∙ York APL |
Derivatives | AHPL ∙ BQN ∙ CoSy ∙ ELI ∙ Glee ∙ I ∙ Ivy ∙ J ∙ Jelly ∙ K (Goal, Klong, Q) ∙ KamilaLisp ∙ Lang5 ∙ Lil ∙ Nial ∙ RAD ∙ Uiua |
Overviews | Comparison of APL dialects ∙ Timeline of array languages ∙ Timeline of influential array languages ∙ Family tree of array languages |