SHARP APL: Difference between revisions

Jump to navigation Jump to search
m
Replaced legacy website link to York University Computer Museum with the current one.
Miraheze>Marshall
mNo edit summary
m (Replaced legacy website link to York University Computer Museum with the current one.)
 
(44 intermediate revisions by 5 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 2017
| withdrawn                = around 1993
| latest release           = 6.0 / 2000
| latest release version  = 20 / 1989
| platforms                = S/370, x86
| platforms                = S/370, x86
| operating systems        = DOS/390, DOS, UNIX (AIX, Solaris), Linux
| operating systems        = DOS/390, DOS, UNIX (AIX, Solaris), Linux
Line 13: Line 14:
| 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]]
| documentation            = [http://twinkfed.homedns.org/UsrDoc/sax/SAX6_Doc.pdf PDF]
| file ext                = .saw, .saf, .sam
| file ext                = .sw, .sf
| download                = [http://www.sigapl.org/Archives/waterloo_archive/apl/sharp.apl/index.html SIGAPL]
| download                = unavailable
}}
}}
[[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''': '''S'''HARP '''A'''PL for UNI'''X''') 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 ==
 
Releases began to be identified primarily by number rather than date beginning with 17.0. From this point, new primitives and other major language changes were added in *.0 releases; many point releases were not updates to the interpreter itself but to other components. For example, release 17.4 updated the printing facility HSPRINT. Point releases affecting the interpreter generally added or extended [[quad name]]s and [[system command]]s, or improved performance. Release number 18 was apparently skipped.
 
{|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. [https://museum.eecs.yorku.ca/collections/show/15 SHARP APL collection catalogue].</ref>  || Improvements in internal architecture
|-
| 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 32: 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> ||                                       ||rowspan="2"|With ([[Bind]])    ||
| 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> ||                                       ||
| 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 Product|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}}
3

edits

Navigation menu