SHARP APL: Difference between revisions

Jump to navigation Jump to search
→‎Releases: Add Table to release 19
Miraheze>Marshall
No edit summary
(→‎Releases: Add Table to release 19)
(48 intermediate revisions by 6 users not shown)
Line 1: Line 1:
{{Infobox array language
{{Infobox array language
| logo                    = [[File:Sharp APL logo.png]]
| array model              = [[Flat array model|flat]] with [[Box|boxes]]
| array model              = [[Flat array model|flat]] with [[Box|boxes]]
| index origin            = 0 or 1
| index origin            = 0 or 1
| function styles          = [[defined functions]], some [[tacit]] capabilities
| function styles          = [[defined function]]s
| numeric types            = 64-bit float, complex
| numeric types            = [[complex]] floats
| unicode support          = none
| unicode support          = none
| released                = around 1979
| released                = 1976 via [[time-sharing]]; around 1979 as a product
| withdrawn                = around 1993
| latest release version  = 20 / 1989
| platforms                = S/370, x86
| operating systems        = DOS/390, DOS, UNIX (AIX, Solaris), Linux
| license                  = Free for personal use / Proprietary commercial software
| developer                = [[I.P. Sharp Associates]]
| developer                = [[I.P. Sharp Associates]]
| influenced by            = [[APL\360]]
| influenced by            = [[APL\360]]
| influenced              = [[J]], [[A+]], [[K]], [[Dyalog APL]]
| influenced              = [[SAX]], [[J]], [[A+]], [[K]], [[Dyalog APL]], [[SHARP APL/HP]]
| file ext                = .saw, .saf, .sam
| download                = [http://www.sigapl.org/Archives/waterloo_archive/apl/sharp.apl/index.html SIGAPL]
}}
}}
[[File:Old SHARP APL.png|thumb|right|SHARP APL running under DOSBox]]
'''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.


'''SHARP APL''' (later '''SAX''') was a standalone version of APL offered by [[I.P. Sharp Associates]] (IPSA), who had previously offered APL interpretation as a timesharing service. IPSA employed many notable APL designers including [[Ken Iverson]], and SHARP APL was the source of many developments in [[flat array theory]]. Notable features of SHARP APL include [[function rank]], the [[Rank operator]], and [[leading axis theory]], as well as relative [[comparison tolerance]] and [[close composition]] operators including [[Under]].
== Releases ==
 
A partial list of SHARP's major releases is shown.
 
{|class=wikitable
! Number !! Released !! Features
|-
|        || 1980    || Compress extended to [[Replicate]]; [[LCM]] and [[GCD]]; [[Grade]] on rank >1<ref>IPSA. [https://www.softwarepreservation.org/projects/apl/Manuals/SharpAPLManualCorrections/view SHARP APL Reference Manual Additions and Corrections, June 1981]</ref>
|-
|        || 1981-05  || Enclosed arrays; [[Enclose]] (<syntaxhighlight lang=apl inline><</syntaxhighlight>), [[Mix|Disclose]] (<syntaxhighlight lang=apl inline>></syntaxhighlight>), [[Match]] (<syntaxhighlight lang=apl inline>≡</syntaxhighlight>); operators [[Atop|Over]] (<syntaxhighlight lang=apl inline>⍥</syntaxhighlight>), [[Over|On]] (<syntaxhighlight lang=apl inline>⍤</syntaxhighlight>), [[Under|With]] (<syntaxhighlight lang=apl inline>¨</syntaxhighlight>); [[complex number]]s<ref>IPSA Newsletter July/August 1981 ([https://www.snakeisland.com/IPSANewsletter_1981_07_08.pdf pdf])</ref>
|-
|        || 1982-05  || Generalized [[determinant]] (<syntaxhighlight lang=apl inline>.</syntaxhighlight>); debugging and formatting improvements<ref>IPSA Newsletter July/August 1982 ([https://www.snakeisland.com/IPSANewsletter_1982_07_08.pdf pdf])</ref>
|-
|        || 1982-11  || [[Complex Floor]], Ceiling, and Residue; reference-counted implementation<ref>IPSA Newsletter November/December 1982 ([https://www.snakeisland.com/IPSANewsletter_1982_11_12.pdf pdf])</ref>
|-
| 15    || 1983-05  || [[Rank operator]] and [[Function rank]]; [[Left|Lev]] (<syntaxhighlight lang=apl inline>⊣</syntaxhighlight>), [[Right|Dex]] (<syntaxhighlight lang=apl inline>⊢</syntaxhighlight>), [[Link]] (<syntaxhighlight lang=apl inline>⊃</syntaxhighlight>)<ref>[https://www.jsoftware.com/papers/satn45.htm "Language Extensions of May 1983"]. SATN-45, 1983-05-02.</ref>
|-
| 17    || 1985-01<ref>York University Computer Museum. [http://www.cse.yorku.ca/museum/collections/IPSA/ipsa_col.html SHARP APL collection catalogue].</ref>  ||
|-
| 19    || 1987-03  || Short left argument for [[Take]]/[[Drop]]; [[Table]] (<syntaxhighlight lang=apl inline>⍪</syntaxhighlight>)<ref>[[Robert Bernecky]]. [https://dl.acm.org/citation.cfm?id=55632 An Introduction to Function Rank] at [[APL88]]. [[APL Quote Quad]], Volume 18, Issue 2. December 1987.</ref>
|-
| 20    || 1989-09  || [[Find|In]] (<syntaxhighlight lang=apl inline>⍷</syntaxhighlight>), [[Nubsieve]] (<syntaxhighlight lang=apl inline>≠</syntaxhighlight>), [[Raze]] (<syntaxhighlight lang=apl inline>↓</syntaxhighlight>); padding for [[Mix|Disclose]] (<syntaxhighlight lang=apl inline>></syntaxhighlight>)<ref>[[IPSA]]. [https://archive.org/details/sharp-apl-release-20.0-guide-for-apl-programmers "SHARP APL Release 20.0: Guide for APL Programmers"].</ref>
|}


== Primitive functions ==
== Primitive functions ==


=== Arithmetic ===
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 ====
=== Scalar ===


All scalar functions have rank zero.
All scalar functions have rank zero.
Line 24: Line 56:
! Glyph                              !! Monadic                !! Dyadic
! Glyph                              !! Monadic                !! Dyadic
|-
|-
| <source lang=apl inline>+</source> || [[Conjugate]]/Identity || [[Addition]]
| <syntaxhighlight lang=apl inline>+</syntaxhighlight> || [[Conjugate]]                 || [[Addition]]
|-
|-
| <source lang=apl inline>-</source> || [[Negate]]             || [[Subtraction]]
| <syntaxhighlight lang=apl inline>-</syntaxhighlight> || [[Negate]]                     || [[Subtraction]]
|-
|-
| <source lang=apl inline>×</source> || [[Signum]]             || [[Multiplication]]
| <syntaxhighlight lang=apl inline>×</syntaxhighlight> || [[Signum]]                     || [[Multiplication]]
|-
|-
| <source lang=apl inline>÷</source> || [[Reciprocal]]         || [[Division]]
| <syntaxhighlight lang=apl inline>÷</syntaxhighlight> || [[Reciprocal]]                 || [[Division]]
|-
|-
| <source lang=apl inline>*</source> || [[Exponential]]       || [[Power function|Power]]
| <syntaxhighlight lang=apl inline>*</syntaxhighlight> || [[Exponential]]               || [[Power (function)|Power]]
|-
|-
| <source lang=apl inline>⍟</source> || [[Natural Logarithm]] || [[Logarithm|Base-⍺ Logarithm]]
| <syntaxhighlight lang=apl inline>⍟</syntaxhighlight> || [[Natural Logarithm]]         || [[Logarithm|Base-⍺ Logarithm]]
|-
|-
| <source lang=apl inline>|</source> || [[Magnitude]]         || [[Residue]]
| <syntaxhighlight lang=apl inline>|</syntaxhighlight> || [[Magnitude]]                 || [[Residue]]
|-
|-
| <source lang=apl inline>!</source> || [[Factorial]]         || Out-Of/[[Combinations]]
| <syntaxhighlight lang=apl inline>!</syntaxhighlight> || [[Factorial]]                 || [[Binomial]]
|-
|-
| <source lang=apl inline>⌊</source> || [[Floor]]             || [[Minimum]]
| <syntaxhighlight lang=apl inline>⌊</syntaxhighlight> || [[Floor]]                     || [[Minimum]]
|-
|-
| <source lang=apl inline>⌈</source> || [[Ceiling]]           || [[Maximum]]
| <syntaxhighlight lang=apl inline>⌈</syntaxhighlight> || [[Ceiling]]                   || [[Maximum]]
|-
|-
| <source lang=apl inline>○</source> || [[Pi Times]]           || [[Circle functions]]
| <syntaxhighlight lang=apl inline>○</syntaxhighlight> || [[Pi Times]]                   || [[Circle functions]]
|-
|-
| <source lang=apl inline>∧</source> ||                       || [[And]]/Least Common Multiple (LCM)
| <syntaxhighlight lang=apl inline>∧</syntaxhighlight> ||                               || [[And]]/[[LCM]]
|-
|-
| <source lang=apl inline>∨</source> ||                       || [[Or]]/Greatest Common Divisor (GCD)
| <syntaxhighlight lang=apl inline>∨</syntaxhighlight> ||                               || [[Or]]/[[GCD]]
|-
|-
| <source lang=apl inline>⍲</source> ||                       || [[Nand]]
| <syntaxhighlight lang=apl inline>⍲</syntaxhighlight> ||                               || [[Nand]]
|-
|-
| <source lang=apl inline>⍱</source> ||                       || [[Nor]]
| <syntaxhighlight lang=apl inline>⍱</syntaxhighlight> ||                               || [[Nor]]
|-
|-
| <source lang=apl inline>~</source> || [[Not]]               || See [[#Miscellaneous|Miscellaneous]]
| <syntaxhighlight lang=apl inline>~</syntaxhighlight> || [[Not]]                       ||
|-
|-
| <source lang=apl inline>?</source> || [[Roll]]               || See [[#Non-Scalar|Non-scalar]]
| <syntaxhighlight lang=apl inline>?</syntaxhighlight> || [[Roll]]                       || See [[#Non-scalar|Non-scalar]]
|-
| <syntaxhighlight lang=apl inline>=</syntaxhighlight> ||                                || [[Equals]]
|-
| <syntaxhighlight lang=apl inline>≠</syntaxhighlight> ||                                || [[Not Equals]]
|-
| <syntaxhighlight lang=apl inline><</syntaxhighlight> || See [[#Non-scalar|Non-scalar]] || [[Less Than]]
|-
| <syntaxhighlight lang=apl inline>≤</syntaxhighlight> ||                                || [[Less Than or Equal]]
|-
| <syntaxhighlight lang=apl inline>≥</syntaxhighlight> ||                                || [[Greater Than or Equal]]
|-
| <syntaxhighlight lang=apl inline>></syntaxhighlight> || See [[#Non-scalar|Non-scalar]] || [[Greater Than]]
|}
|}


==== Non-scalar ====
=== Non-scalar ===


{| class=wikitable
{| class=wikitable
! Glyph                          !! Rank !! Monadic              !! Ranks !! Dyadic
! Glyph                          !! Rank !! Monadic              !! Ranks !! Dyadic
|-
|-
| <source lang=apl inline>⌹</source> || 2 || [[Matrix inverse]]     || ∞ 2 || [[Matrix divide]]
| <syntaxhighlight lang=apl inline>⌹</syntaxhighlight> || 2 || [[Matrix inverse]]             || ∞ 2 || [[Matrix divide]]
|-
|-
| <source lang=apl inline>?</source> ||  || See [[#Scalar|Scalar]] || * * || [[Deal]]
| <syntaxhighlight lang=apl inline>?</syntaxhighlight> ||  || See [[#Scalar|Scalar]]         || * * || [[Deal]]
|-
|-
| <source lang=apl inline>⊤</source> ||  ||                       || ∞ ∞ || [[Encode]]
| <syntaxhighlight lang=apl inline>⊤</syntaxhighlight> ||  ||                                 || ∞ ∞ || [[Encode]]
|-
|-
| <source lang=apl inline>⊥</source> ||  ||                        || ∞ ∞ || [[Decode]]
| <syntaxhighlight lang=apl inline>⊥</syntaxhighlight> ||  ||                                 || ∞ ∞ || [[Decode]]
|-
| <syntaxhighlight lang=apl inline>≡</syntaxhighlight> ||  ||                                || ∞ ∞ || [[Match]]
|-
| <syntaxhighlight lang=apl inline>∊</syntaxhighlight> ||  ||                                || 0 ∞ || [[Membership]]
|-
| <syntaxhighlight lang=apl inline>⍳</syntaxhighlight> || 1 || [[Index Generator|Count]]      || 1 0 || [[Index Of]]
|-
| <syntaxhighlight lang=apl inline>⍋</syntaxhighlight> || ∞ || Numeric [[Grade up]]            || ∞ ∞ || Character [[Grade up]]
|-
| <syntaxhighlight lang=apl inline>⍒</syntaxhighlight> || ∞ || Numeric [[Grade down]]          || ∞ ∞ || Character [[Grade down]]
|-
| <syntaxhighlight lang=apl inline>⍴</syntaxhighlight> || ∞ || [[Shape|Shape of]]              || 1 ∞ || [[Reshape]]
|-
| <syntaxhighlight lang=apl inline>↑</syntaxhighlight> ||  ||                                || 1 ∞ || [[Take]]
|-
| <syntaxhighlight lang=apl inline>↓</syntaxhighlight> ||  ||                                || 1 ∞ || [[Drop]]
|-
| <syntaxhighlight lang=apl inline><</syntaxhighlight> || ∞ || [[Enclose]]                    ||    || See [[#Scalar|Scalar]]
|-
| <syntaxhighlight lang=apl inline>⊃</syntaxhighlight> || ∞ || [[Conditional enclose]]        || ∞ ∞ || [[Link]]
|-
| <syntaxhighlight lang=apl inline>></syntaxhighlight> || 0 || [[Mix|Disclose]]                    ||    || See [[#Scalar|Scalar]]
|-
| <syntaxhighlight lang=apl inline>,</syntaxhighlight> || ∞ || [[Ravel]]                      || ∞ ∞ || [[Catenate]]
|-
| <syntaxhighlight lang=apl inline>⍪</syntaxhighlight> || ∞ || [[Table]]                      || ∞ ∞ || [[Catenate First]]
|-
| <syntaxhighlight lang=apl inline>⌽</syntaxhighlight> || 1 || [[Reverse]]                    || 0 1 || [[Rotate]]
|-
| <syntaxhighlight lang=apl inline>⊖</syntaxhighlight> || ∞ || [[Reverse First]]              || ∞ ∞ || [[Rotate First]]
|-
| <syntaxhighlight lang=apl inline>⍉</syntaxhighlight> || ∞ || Monadic [[Transpose]]          || 0 ∞ || Dyadic [[Transpose]]
|-
| <syntaxhighlight lang=apl inline>⊣</syntaxhighlight> || ∞ || [[Stop]]                       || ∞ ∞ || [[Left Identity|Left]]
|-
| <syntaxhighlight lang=apl inline>⊢</syntaxhighlight> || ∞ || [[Identity|Pass]]              || ∞ ∞ || [[Right Identity|Right]]
|-
| <syntaxhighlight lang=apl inline>⍕</syntaxhighlight> || ∞ || [[Monadic Format]]              || * ∞ || [[Dyadic Format]]
|-
| <syntaxhighlight lang=apl inline>⍎</syntaxhighlight> || * || [[Execute]]                     ||    ||
|}
|}


=== Relational ===
== Primitive Operators ==


{| class=wikitable
{| class=wikitable
! Glyph                           !! Rank !! Monadic                            !! Ranks !! Dyadic
! Glyph !!colspan=2|Operands !!colspan=2|Ranks !! Monadic Call  !! Dyadic Call
|-
|-
| <source lang=apl inline>=</source> ||   || See [[#Miscellaneous|Miscellaneous]] || 0 0 || [[Equals]]
| <syntaxhighlight lang=apl inline>/</syntaxhighlight> ||                                   || <syntaxhighlight lang=apl inline>f</syntaxhighlight> || <syntaxhighlight lang=apl inline>∞</syntaxhighlight>  ||                                       || [[Reduce]]                     ||
|-
|-
| <source lang=apl inline></source> ||   || See [[#Miscellaneous|Miscellaneous]] || 0 0 || [[Not Equals]]
| <syntaxhighlight lang=apl inline></syntaxhighlight> ||                                   || <syntaxhighlight lang=apl inline>f</syntaxhighlight> || <syntaxhighlight lang=apl inline>∞</syntaxhighlight>  ||                                       || [[Reduce First]]               ||
|-
|-
| <source lang=apl inline><</source> ||   || See [[#Structural|Structural]]      || 0 0 || [[Less Than]]
| <syntaxhighlight lang=apl inline>\</syntaxhighlight> ||                                   || <syntaxhighlight lang=apl inline>f</syntaxhighlight> || <syntaxhighlight lang=apl inline>∞</syntaxhighlight>  ||                                       || [[Scan]]                       ||
|-
|-
| <source lang=apl inline></source> ||   ||                                     || 0 0 || [[Less Than or Equal]]
| <syntaxhighlight lang=apl inline></syntaxhighlight> ||                                   || <syntaxhighlight lang=apl inline>f</syntaxhighlight> || <syntaxhighlight lang=apl inline>∞</syntaxhighlight>  ||                                       || [[Scan First]]                 ||
|-
|-
| <source lang=apl inline></source> ||   ||                                     || 0 0 || [[Greater Than or Equal]]
| <syntaxhighlight lang=apl inline>/</syntaxhighlight> ||                                   || <syntaxhighlight lang=apl inline>m</syntaxhighlight> || <syntaxhighlight lang=apl inline>∞</syntaxhighlight>  ||                                        || [[Replicate]]                   ||
|-
|-
| <source lang=apl inline>></source> ||   || See [[#Structural|Structural]]      || 0 0 || [[Greater Than]]
| <syntaxhighlight lang=apl inline></syntaxhighlight> ||                                   || <syntaxhighlight lang=apl inline>m</syntaxhighlight> || <syntaxhighlight lang=apl inline>∞</syntaxhighlight>  ||                                       || [[Replicate First]]             ||
|-
|-
| <source lang=apl inline></source> ||   ||                                     || ∞ || [[Match]]
| <syntaxhighlight lang=apl inline>\</syntaxhighlight> ||                                   || <syntaxhighlight lang=apl inline>m</syntaxhighlight> || <syntaxhighlight lang=apl inline></syntaxhighlight>  ||                                        || [[Expand]]                     ||
|-
|-
| <source lang=apl inline></source> ||   ||                                     || 0 ∞ || [[Membership]]
| <syntaxhighlight lang=apl inline></syntaxhighlight> ||                                   || <syntaxhighlight lang=apl inline>m</syntaxhighlight> || <syntaxhighlight lang=apl inline></syntaxhighlight>  ||                                        || [[Expand First]]               ||
|-
|-
| <source lang=apl inline></source> ||   ||                                     || ∞ ∞ || [[Find]]
| <syntaxhighlight lang=apl inline></syntaxhighlight> || <syntaxhighlight lang=apl inline>f</syntaxhighlight> || <syntaxhighlight lang=apl inline>g</syntaxhighlight> || <syntaxhighlight lang=apl inline>mg</syntaxhighlight> || <syntaxhighlight lang=apl inline>mg mg</syntaxhighlight> ||colspan=2| On ([[close Over]])
|-
| <syntaxhighlight lang=apl inline>⍤</syntaxhighlight> || <syntaxhighlight lang=apl inline>f</syntaxhighlight> || <syntaxhighlight lang=apl inline>n</syntaxhighlight> || <syntaxhighlight lang=apl inline>n</syntaxhighlight>  || <syntaxhighlight lang=apl inline>n  n</syntaxhighlight>  ||colspan=2| [[Rank operator|Rank]]
|-
| <syntaxhighlight lang=apl inline>⍤</syntaxhighlight> || <syntaxhighlight lang=apl inline>m</syntaxhighlight> || <syntaxhighlight lang=apl inline>g</syntaxhighlight> || <syntaxhighlight lang=apl inline>mg</syntaxhighlight> || <syntaxhighlight lang=apl inline>mg mg</syntaxhighlight> ||colspan=2| [[Cut]]
|-
| <syntaxhighlight lang=apl inline>⍥</syntaxhighlight> || <syntaxhighlight lang=apl inline>f</syntaxhighlight> || <syntaxhighlight lang=apl inline>g</syntaxhighlight> || <syntaxhighlight lang=apl inline>mg</syntaxhighlight> || <syntaxhighlight lang=apl inline>mg mg</syntaxhighlight> ||colspan=2| Upon ([[close Atop]])
|-
| <syntaxhighlight lang=apl inline>¨</syntaxhighlight> || <syntaxhighlight lang=apl inline>f</syntaxhighlight> || <syntaxhighlight lang=apl inline>g</syntaxhighlight> || <syntaxhighlight lang=apl inline>mg</syntaxhighlight> || <syntaxhighlight lang=apl inline>mg mg</syntaxhighlight> ||colspan=2| [[close Under|Dual]]
|-
| <syntaxhighlight lang=apl inline>¨</syntaxhighlight> || <syntaxhighlight lang=apl inline>m</syntaxhighlight> || <syntaxhighlight lang=apl inline>g</syntaxhighlight> || <syntaxhighlight lang=apl inline>mg</syntaxhighlight> ||                                        ||rowspan="2"|With ([[Bind]])    ||
|-
| <syntaxhighlight lang=apl inline>¨</syntaxhighlight> || <syntaxhighlight lang=apl inline>f</syntaxhighlight> || <syntaxhighlight lang=apl inline>n</syntaxhighlight> || <syntaxhighlight lang=apl inline>mf</syntaxhighlight> ||                                        ||
|-
| <syntaxhighlight lang=apl inline>.</syntaxhighlight> || <syntaxhighlight lang=apl inline>f</syntaxhighlight> || <syntaxhighlight lang=apl inline>g</syntaxhighlight> || <syntaxhighlight lang=apl inline>2</syntaxhighlight>  || <syntaxhighlight lang=apl inline> </syntaxhighlight>  || [[Determinant]]                || [[Inner Product]]
|-
| <syntaxhighlight lang=apl inline>.</syntaxhighlight> || <syntaxhighlight lang=apl inline>m</syntaxhighlight> || <syntaxhighlight lang=apl inline>g</syntaxhighlight> ||                                    || <syntaxhighlight lang=apl inline>∞  ∞</syntaxhighlight>  ||                                || [[Outer Product]]
|}
|}


=== Indexing ===
== 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
 
[https://www.jsoftware.com/papers/satn40.htm 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 [https://www.jsoftware.com/papers/SATN.pdf pdf collection] of SHARP APL Technical Notes is hosted at jsoftware.com, as are html transcriptions of some notes, linked in the table below.


{| class=wikitable
{|class=wikitable
! Glyph                          !! Rank !! Monadic                            !! Ranks !! Dyadic
! Number !! Issued !!colspan=2| Revised !! Author            !! Title
|-
|  0 || 1976-01-01 ||  ||            ||                      || SATN Introduction
|-
|  1 || 1976-01-01 ||  ||            ||                      || TASKID
|-
|-
| <source lang=apl inline>@</source> ||   || See [[#Miscellaneous|Miscellaneous]] || 0 ∞ || [[Squad Index|From]]
| 2 ||           || 5 || 1979-02-14 ||                     || Control Messages
|-
|-
| <source lang=apl inline>⍳</source> || 1 || [[Iota|Count]]                      || 1 0 || [[Index Of]]
| 3 || 1976-01-01 ||   ||           ||                     || ⎕OUT
|-
|-
| <source lang=apl inline>⍸</source> ||   ||                                     || ∞ ∞ || [[Indices of Match|Index]]
| 4 ||           || 2 || 1978-04-01 ||                     || N-tasks and B-tasks
|-
|-
| <source lang=apl inline>⍋</source> || || Numeric [[Grade up]]                || ∞ ∞ || Character [[Grade up]]
| 5 ||           || 2 || 1978-08-01 ||                     || Batch APL
|-
|-
| <source lang=apl inline>⍒</source> || || Numeric [[Grade down]]              || ∞ ∞ || Character [[Grade down]]
| 6 || 1976-01-01 ||   ||            ||                     || [[Execute]]
|}
 
=== Structural ===
 
{| class=wikitable
! Glyph                          !! Rank !! Monadic                                !! Ranks !! Dyadic
|-
|-
| <source lang=apl inline>⍴</source> || || [[Shape|Shape of]]                        || 1 ∞ || [[Reshape]]
| 7 || 1976-01-01 ||   ||           ||                     || Latent Expression
|-
|-
| <source lang=apl inline>↑</source> ||   || See [[#Miscellaneous|Miscellaneous]]      || 1 ∞ || [[Take]]
| 8 ||           || 2 || 1978-03-01 ||                     || HSPRINT
|-
|-
| <source lang=apl inline>↓</source> || || [[Raze]]                                  || 1 ∞ || [[Drop]]
| 9 ||           || 1 || 1979-08-01 || John D. Burger      || Usage Inquiry System
|-
|-
| <source lang=apl inline><</source> || || [[Enclose]]/Box                          ||     || See [[#Relational|Relational]]
| 10 ||           || 2 || 1978-06-01 ||                     || SORTREQ
|-
|-
| <source lang=apl inline>⊃</source> || || [[Enclose if simple|Conditional Enclose]] || ∞ ∞ || [[Link]]
| 11 || 1976-01-01 ||   ||           ||                     || )RESET
|-
|-
| <source lang=apl inline>></source> || 0 || [[Disclose]]/Open                        ||     || See [[#Relational|Relational]]
| 12 || 1976-01-01 ||   ||           ||                     || )COPY
|-
|-
| <source lang=apl inline>,</source> || || [[Ravel]]                                || ∞ ∞ || [[Catenate]]
| 13 || 1978-03-10 ||   ||           ||                     || Early Warnings
|-
|-
| <source lang=apl inline>⍪</source> || || [[Table]]                                || ∞ ∞ || [[Catenate First|Catenate-Down]]
| 14 ||           || 2 || 1978-08-15 ||                     || Package - A New Variable Type
|-
|-
| <source lang=apl inline>⌽</source> || 1 || [[Reverse]]                              || 0 1 || [[Rotate]]
| 15 ||           ||   ||           ||                     || Index
|-
|-
| <source lang=apl inline>⊖</source> || || [[Reverse First|Reverse-Down]]           || ∞ ∞ || [[Rotate First|Rotate-Down]]
| 16 || 1976-04-20 ||   ||            ||                     || File System Must-Write Buffers
|-
|-
| <source lang=apl inline>⍉</source> || || Monadic [[Transpose]]                    || 0 ∞ || Dyadic [[Transpose]]
| 17 || 1976-06-01 ||   ||           ||                     || Formatting Primitive
|}
 
=== Miscellaneous ===
 
{| class=wikitable
! Glyph                          !! Rank !! Monadic                !! Ranks !! Dyadic
|-
|-
| <source lang=apl inline>⊣</source> || || [[Stop]]                  || ∞ ∞ || [[Left Identity|Left]]
| 18 || 1976-07-01 ||   ||           ||                     || ⎕FMT
|-
|-
| <source lang=apl inline>⊢</source> || || [[Identity|Pass]]        || ∞ ∞ || [[Right Identity|Right]]
| 19 || 1977-01-01 ||   ||           ||                     || Fileprint
|-
|-
| <source lang=apl inline>≠</source> || || [[Nubsieve]]              ||     || See [[#Relational|Relational]]
| 20 ||           || 4 || 1978-06-01 ||                     || System Variables, Session Variables and System Functions
|-
|-
| <source lang=apl inline>↑</source> || || [[Nub]]                  ||     || See [[#Structural|Structural]]
| 21 ||           || 1 || 1978-06-01 ||                     || ⎕WS and ⎕FD
|-
|-
| <source lang=apl inline>=</source> || || [[Nubin]]                ||     || See [[#Relational|Relational]]
| 22 ||           || 2 || 1979-01-01 || [[Bob Bernecky]] and Mike Symes || APL Worspace Transfer
|-
|-
| <source lang=apl inline>~</source> ||   || See [[#Scalar|Scalar]]   || ∞ ∞ || [[Without|Less]]
| 23 || 1977-06-10 || 1 || 1978-07-15 || [[Bob Bernecky]]     || [[Comparison tolerance|Comparison Tolerance]] ([https://www.jsoftware.com/papers/satn23.htm web])
|-
|-
| <source lang=apl inline>@</source> || 1 || [[Cartesian Product|All]] ||     || See [[#Indexing|Indexing]]
| 24 || 1977-03-23 ||   ||           ||                     || Symbol Table
|-
|-
| <source lang=apl inline>⍕</source> || || [[Monadic Format]]        || * ∞ || [[Dyadic Format]]
| 25 || 1977-05-15 ||   ||           ||                     || Extensions to Argument Passing
|-
|-
| <source lang=apl inline>⍎</source> || * || [[Execute]]              ||     ||
| 26 || 1977-09-10 ||   ||           ||                     || Enhancements to the File System
|}
 
== Primitive Operators ==
 
{| class=wikitable
! Glyph !!colspan=2|Operands !!colspan=2|Ranks !! Monadic Call  !! Dyadic Call
|-
|-
| <source lang=apl inline>/</source> ||                                   || <source lang=apl inline>f</source> || <source lang=apl inline>∞</source>  ||                                       || [[Reduce]]                     ||
| 28 || 1977-07-11 ||   ||           ||                      || Terminal Control
|-
|-
| <source lang=apl inline>⌿</source> ||                                   || <source lang=apl inline>f</source> || <source lang=apl inline>∞</source>  ||                                       || [[Reduce First|Reduce-down]]    ||
| 29 || 1978-06-15 ||   ||           ||                     || System Time and Timestamps
|-
|-
| <source lang=apl inline>\</source> ||                                   || <source lang=apl inline>f</source> || <source lang=apl inline>∞</source>  ||                                       || [[Scan]]                        ||
| 30 || 1979-01-01 ||   ||           ||                     || Numeric Display
|-
|-
| <source lang=apl inline>⍀</source> ||                                   || <source lang=apl inline>f</source> || <source lang=apl inline>∞</source>  ||                                       || [[Scan First|Scan-down]]       ||
| 31 || 1979-02-01 ||   ||           ||                     || [[Line editor|Line Editing]] in SHARP APL
|-
|-
| <source lang=apl inline>/</source> ||                                   || <source lang=apl inline>m</source> || <source lang=apl inline>∞</source>  ||                                       || [[Replicate|Copy]]/[[Compress]] ||
| 32 || 1979-03-30 ||   ||           ||                     || Shared Variables
|-
|-
| <source lang=apl inline>⌿</source> ||                                   || <source lang=apl inline>m</source> || <source lang=apl inline>∞</source>  ||                                       || [[Replicate|Copy]]-down/[[Compress]]-down ||
| 33 || 1979-03-26 ||   ||           ||                     || Event Trapping
|-
|-
| <source lang=apl inline>\</source> ||                                   || <source lang=apl inline>m</source> || <source lang=apl inline>∞</source>  ||                                       || [[Expand]]                     ||
| 34 || 1980-08-15 ||   ||           || [[Bob Bernecky]]    || [[Replicate|Replication]]
|-
|-
| <source lang=apl inline>⍀</source> ||                                   || <source lang=apl inline>m</source> || <source lang=apl inline>∞</source>  ||                                       || [[Expand First|Expand-down]]   ||
| 35 || 1980-08-15 ||   ||           || Peter Wooster        || Extended [[Grade|Upgrade and Downgrade]]
|-
|-
| <source lang=apl inline>⊂</source> ||                                   || <source lang=apl inline>f</source> || <source lang=apl inline>∞</source>  || <source lang=apl inline>rf lf</source> ||colspan=2| Swap
| 36 || 1980-04-20 ||   ||           || [[Ken Iverson]]      || [[Direct definition (notation)|Direct Definition]]
|-
|-
| <source lang=apl inline>&</source> ||                                   || <source lang=apl inline>f</source> || <source lang=apl inline>∞</source>  || <source lang=apl inline>∞  ∞</source>  ||colspan=2| Select
| 37 ||           || 1 || 1982-06-01 || John D. Burger      || IBM 3270 User Guide
|-
|-
| <source lang=apl inline>⍤</source> || <source lang=apl inline>f</source> || <source lang=apl inline>g</source> || <source lang=apl inline>mg</source> || <source lang=apl inline>mg mg</source> ||colspan=2| On ([[close Over]])
| 39 || 1981-06-01 ||   ||           || [[Richard Lathwell]] || [https://www.jsoftware.com/papers/satn39.htm The SHARP APL S-task Interface]
|-
|-
| <source lang=apl inline>⍤</source> || <source lang=apl inline>f</source> || <source lang=apl inline>n</source> || <source lang=apl inline>n</source>  || <source lang=apl inline>n  n</source>  ||colspan=2| [[Rank operator|Rank]]
| 40 || 1981-06-20 ||   ||           || [[Eugene McDonnell]] || [[Complex number|Complex Numbers]] ([https://www.jsoftware.com/papers/satn40.htm web])
|-
|-
| <source lang=apl inline>⍤</source> || <source lang=apl inline>m</source> || <source lang=apl inline>g</source> || <source lang=apl inline>mg</source> || <source lang=apl inline>mg mg</source> ||colspan=2| [[Cut operator|Cut]]
| 41 || 1981-06-20 ||   ||           || [[Ken Iverson]]      || [[Close composition|Composition]] and [[Box function|Enclosure]] ([https://www.jsoftware.com/papers/satn41.htm web])
|-
|-
| <source lang=apl inline>⍥</source> || <source lang=apl inline>f</source> || <source lang=apl inline>g</source> || <source lang=apl inline>mg</source> || <source lang=apl inline>mg mg</source> ||colspan=2| Upon ([[close Atop]])
| 42 || 1982-04-01 ||   ||           || [[Ken Iverson]]      || [[Determinant]]-Like Functions Produced by the Dot-Operator ([https://www.jsoftware.com/papers/satn42.htm web])
|-
|-
| <source lang=apl inline>¨</source> || <source lang=apl inline>f</source> || <source lang=apl inline>g</source> || <source lang=apl inline>mg</source> || <source lang=apl inline>mg mg</source> ||colspan=2| [[close Under|Under]]
| 43 || 1982-11-05 ||   ||           || Peter Wooster        || Improved Display for Enclosed Arrays and a New System Variable ⎕PS
|-
|-
| <source lang=apl inline>¨</source> || <source lang=apl inline>m</source> || <source lang=apl inline>g</source> || <source lang=apl inline>mg</source> ||                                       || [[With]]                        ||
| 44 || 1983-04-02 ||   ||           || Robert C. Metzger    || Enhancements to Event Handling
|-
|-
| <source lang=apl inline>¨</source> || <source lang=apl inline>f</source> || <source lang=apl inline>n</source> || <source lang=apl inline>mf</source> ||                                       || [[With]]                       ||
| 45 || 1983-05-02 ||   ||           || Various              || [https://www.jsoftware.com/papers/satn45.htm Language Extensions of May 1983]
|-
|-
| <source lang=apl inline>.</source> || <source lang=apl inline>f</source> || <source lang=apl inline>g</source> || <source lang=apl inline>2</source>  || <source lang=apl inline>∞  ∞</source>  || [[Alternant]]                   || [[Inner Product|Inner-product]]
| 46 || 1983-08-05 ||   ||           || [[Eric Iverson]]     || Enhancements Provided in Update #1 to the May 1983 Release of SHARP APL
|-
|-
| <source lang=apl inline>.</source> || <source lang=apl inline>m</source> || <source lang=apl inline>g</source> ||                                     || <source lang=apl inline>∞  ∞</source>  ||                                 || [[Tie]], [[Outer Produce|Outer-product]]
| 47 || 1983-10-01 ||   ||           || Mike Symes          || IBM 3270 User Guide (IDSH)
|-
|-
| <source lang=apl inline>.</source> || <source lang=apl inline>f</source> || <source lang=apl inline>m</source> || <source lang=apl inline>mf</source> ||                                       || [[Ply]]                        ||
| 48 || 1983-11-30 ||   ||           || John D. Burger      || Workspace 1 HCPRINT
|}
|}


== Implementation ==
== References ==
 
<references/>
=== Numeric types ===
{{APL dialects}}[[Category:APL dialects]][[Category:Flat array languages]][[Category:Leading axis languages]]
 
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
 
[https://www.jsoftware.com/papers/satn40.htm SATN-40] describes the addition of complex numbers to SHARP APL.
 
== External links ==
 
[https://en.wikipedia.org/wiki/I._P._Sharp_Associates Wikipedia]
 
{{APL programming language}}

Navigation menu