SHARP APL: Difference between revisions

From APL Wiki
Jump to navigation Jump to search
(→‎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)
m (Replaced legacy website link to York University Computer Museum with the current one.)
 
(14 intermediate revisions by one other user not shown)
Line 8: Line 8:
| released                = 1976 via [[time-sharing]]; around 1979 as a product
| released                = 1976 via [[time-sharing]]; around 1979 as a product
| withdrawn                = around 1993
| withdrawn                = around 1993
| latest release           = 002.140 / 1988
| 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 23: Line 23:
== Releases ==
== Releases ==


A partial list of SHARP's major releases is shown.
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
{|class=wikitable
Line 30: Line 30:
|        || 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>
|        || 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>), [[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>
|        || 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-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>
Line 38: Line 38:
| 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>
| 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>  ||
| 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]]<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>
| 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 [[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>
| 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>
|}
|}


Line 64: Line 64:
| <syntaxhighlight lang=apl inline>÷</syntaxhighlight> || [[Reciprocal]]                || [[Division]]
| <syntaxhighlight lang=apl inline>÷</syntaxhighlight> || [[Reciprocal]]                || [[Division]]
|-
|-
| <syntaxhighlight lang=apl inline>*</syntaxhighlight> || [[Exponential]]                || [[Power function|Power]]
| <syntaxhighlight lang=apl inline>*</syntaxhighlight> || [[Exponential]]                || [[Power (function)|Power]]
|-
|-
| <syntaxhighlight lang=apl inline>⍟</syntaxhighlight> || [[Natural Logarithm]]          || [[Logarithm|Base-⍺ Logarithm]]
| <syntaxhighlight lang=apl inline>⍟</syntaxhighlight> || [[Natural Logarithm]]          || [[Logarithm|Base-⍺ Logarithm]]
Line 88: Line 88:
| <syntaxhighlight lang=apl inline>~</syntaxhighlight> || [[Not]]                        ||
| <syntaxhighlight lang=apl inline>~</syntaxhighlight> || [[Not]]                        ||
|-
|-
| <syntaxhighlight lang=apl inline>?</syntaxhighlight> || [[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> ||                                || [[Equals]]
Line 94: Line 94:
| <syntaxhighlight lang=apl inline>≠</syntaxhighlight> ||                                || [[Not 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> || See [[#Non-scalar|Non-scalar]] || [[Less Than]]
|-
|-
| <syntaxhighlight lang=apl inline>≤</syntaxhighlight> ||                                || [[Less Than or Equal]]
| <syntaxhighlight lang=apl inline>≤</syntaxhighlight> ||                                || [[Less Than or Equal]]
Line 100: Line 100:
| <syntaxhighlight lang=apl inline>≥</syntaxhighlight> ||                                || [[Greater Than or Equal]]
| <syntaxhighlight lang=apl inline>≥</syntaxhighlight> ||                                || [[Greater Than or Equal]]
|-
|-
| <syntaxhighlight lang=apl inline>></syntaxhighlight> || See [[#Non-Scalar|Non-scalar]] || [[Greater Than]]
| <syntaxhighlight lang=apl inline>></syntaxhighlight> || See [[#Non-scalar|Non-scalar]] || [[Greater Than]]
|}
|}


Line 132: Line 132:
| <syntaxhighlight lang=apl inline>↓</syntaxhighlight> ||  ||                                || 1 ∞ || [[Drop]]
| <syntaxhighlight lang=apl inline>↓</syntaxhighlight> ||  ||                                || 1 ∞ || [[Drop]]
|-
|-
| <syntaxhighlight lang=apl inline><</syntaxhighlight> || ∞ || [[Enclose]]/Box                ||    || See [[#Scalar|Scalar]]
| <syntaxhighlight lang=apl inline><</syntaxhighlight> || ∞ || [[Enclose]]                     ||    || See [[#Scalar|Scalar]]
|-
|-
| <syntaxhighlight lang=apl inline>⊃</syntaxhighlight> ||   ||                                 || ∞ ∞ || [[Link]]
| <syntaxhighlight lang=apl inline>⊃</syntaxhighlight> || || [[Conditional enclose]]        || ∞ ∞ || [[Link]]
|-
|-
| <syntaxhighlight lang=apl inline>></syntaxhighlight> || 0 || [[Disclose]]/Open              ||    || See [[#Scalar|Scalar]]
| <syntaxhighlight lang=apl inline>></syntaxhighlight> || 0 || [[Mix|Disclose]]                   ||    || See [[#Scalar|Scalar]]
|-
|-
| <syntaxhighlight lang=apl inline>,</syntaxhighlight> || ∞ || [[Ravel]]                      || ∞ ∞ || [[Catenate]]
| <syntaxhighlight lang=apl inline>,</syntaxhighlight> || ∞ || [[Ravel]]                      || ∞ ∞ || [[Catenate]]
|-
|-
| <syntaxhighlight lang=apl inline>⍪</syntaxhighlight> || ∞ || [[Table]]                      || ∞ ∞ || [[Catenate First|Catenate-Down]]
| <syntaxhighlight lang=apl inline>⍪</syntaxhighlight> || ∞ || [[Table]]                      || ∞ ∞ || [[Catenate First]]
|-
|-
| <syntaxhighlight lang=apl inline>⌽</syntaxhighlight> || 1 || [[Reverse]]                    || 0 1 || [[Rotate]]
| <syntaxhighlight lang=apl inline>⌽</syntaxhighlight> || 1 || [[Reverse]]                    || 0 1 || [[Rotate]]
|-
|-
| <syntaxhighlight lang=apl inline>⊖</syntaxhighlight> || ∞ || [[Reverse First|Reverse-Down]] || ∞ ∞ || [[Rotate First|Rotate-Down]]
| <syntaxhighlight lang=apl inline>⊖</syntaxhighlight> || ∞ || [[Reverse First]]               || ∞ ∞ || [[Rotate First]]
|-
|-
| <syntaxhighlight lang=apl inline>⍉</syntaxhighlight> || ∞ || Monadic [[Transpose]]          || 0 ∞ || Dyadic [[Transpose]]
| <syntaxhighlight lang=apl inline>⍉</syntaxhighlight> || ∞ || Monadic [[Transpose]]          || 0 ∞ || Dyadic [[Transpose]]
Line 164: Line 164:
| <syntaxhighlight lang=apl inline>/</syntaxhighlight> ||                                    || <syntaxhighlight lang=apl inline>f</syntaxhighlight> || <syntaxhighlight lang=apl inline>∞</syntaxhighlight>  ||                                        || [[Reduce]]                      ||
| <syntaxhighlight lang=apl inline>/</syntaxhighlight> ||                                    || <syntaxhighlight lang=apl inline>f</syntaxhighlight> || <syntaxhighlight lang=apl inline>∞</syntaxhighlight>  ||                                        || [[Reduce]]                      ||
|-
|-
| <syntaxhighlight lang=apl inline>⌿</syntaxhighlight> ||                                    || <syntaxhighlight lang=apl inline>f</syntaxhighlight> || <syntaxhighlight lang=apl inline>∞</syntaxhighlight>  ||                                        || [[Reduce First|Reduce-down]]   ||
| <syntaxhighlight lang=apl inline>⌿</syntaxhighlight> ||                                    || <syntaxhighlight lang=apl inline>f</syntaxhighlight> || <syntaxhighlight lang=apl inline>∞</syntaxhighlight>  ||                                        || [[Reduce First]]               ||
|-
|-
| <syntaxhighlight lang=apl inline>\</syntaxhighlight> ||                                    || <syntaxhighlight lang=apl inline>f</syntaxhighlight> || <syntaxhighlight lang=apl inline>∞</syntaxhighlight>  ||                                        || [[Scan]]                        ||
| <syntaxhighlight lang=apl inline>\</syntaxhighlight> ||                                    || <syntaxhighlight lang=apl inline>f</syntaxhighlight> || <syntaxhighlight lang=apl inline>∞</syntaxhighlight>  ||                                        || [[Scan]]                        ||
|-
|-
| <syntaxhighlight lang=apl inline>⍀</syntaxhighlight> ||                                    || <syntaxhighlight lang=apl inline>f</syntaxhighlight> || <syntaxhighlight lang=apl inline>∞</syntaxhighlight>  ||                                        || [[Scan First|Scan-down]]       ||
| <syntaxhighlight lang=apl inline>⍀</syntaxhighlight> ||                                    || <syntaxhighlight lang=apl inline>f</syntaxhighlight> || <syntaxhighlight lang=apl inline>∞</syntaxhighlight>  ||                                        || [[Scan First]]                 ||
|-
|-
| <syntaxhighlight lang=apl inline>/</syntaxhighlight> ||                                    || <syntaxhighlight lang=apl inline>m</syntaxhighlight> || <syntaxhighlight lang=apl inline>∞</syntaxhighlight>  ||                                        || [[Replicate|Copy]]/[[Compress]] ||
| <syntaxhighlight lang=apl inline>/</syntaxhighlight> ||                                    || <syntaxhighlight lang=apl inline>m</syntaxhighlight> || <syntaxhighlight lang=apl inline>∞</syntaxhighlight>  ||                                        || [[Replicate]]                   ||
|-
|-
| <syntaxhighlight lang=apl inline>⌿</syntaxhighlight> ||                                    || <syntaxhighlight lang=apl inline>m</syntaxhighlight> || <syntaxhighlight lang=apl inline>∞</syntaxhighlight>  ||                                        || [[Replicate|Copy]]-down/[[Compress]]-down ||
| <syntaxhighlight lang=apl inline>⌿</syntaxhighlight> ||                                    || <syntaxhighlight lang=apl inline>m</syntaxhighlight> || <syntaxhighlight lang=apl inline>∞</syntaxhighlight>  ||                                        || [[Replicate First]]             ||
|-
|-
| <syntaxhighlight lang=apl inline>\</syntaxhighlight> ||                                    || <syntaxhighlight lang=apl inline>m</syntaxhighlight> || <syntaxhighlight lang=apl inline>∞</syntaxhighlight>  ||                                        || [[Expand]]                      ||
| <syntaxhighlight lang=apl inline>\</syntaxhighlight> ||                                    || <syntaxhighlight lang=apl inline>m</syntaxhighlight> || <syntaxhighlight lang=apl inline>∞</syntaxhighlight>  ||                                        || [[Expand]]                      ||
|-
|-
| <syntaxhighlight lang=apl inline>⍀</syntaxhighlight> ||                                    || <syntaxhighlight lang=apl inline>m</syntaxhighlight> || <syntaxhighlight lang=apl inline>∞</syntaxhighlight>  ||                                        || [[Expand First|Expand-down]]   ||
| <syntaxhighlight lang=apl inline>⍀</syntaxhighlight> ||                                    || <syntaxhighlight lang=apl inline>m</syntaxhighlight> || <syntaxhighlight lang=apl inline>∞</syntaxhighlight>  ||                                        || [[Expand First]]               ||
|-
| <syntaxhighlight lang=apl inline>⊂</syntaxhighlight> ||                                    || <syntaxhighlight lang=apl inline>f</syntaxhighlight> || <syntaxhighlight lang=apl inline>∞</syntaxhighlight>  || <syntaxhighlight lang=apl inline>rf lf</syntaxhighlight> ||colspan=2| Swap
|-
| <syntaxhighlight lang=apl inline>&</syntaxhighlight> ||                                    || <syntaxhighlight lang=apl inline>f</syntaxhighlight> || <syntaxhighlight lang=apl inline>∞</syntaxhighlight>  || <syntaxhighlight lang=apl inline>∞  ∞</syntaxhighlight>  ||colspan=2| Select
|-
|-
| <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>g</syntaxhighlight> || <syntaxhighlight lang=apl inline>mg</syntaxhighlight> || <syntaxhighlight lang=apl inline>mg mg</syntaxhighlight> ||colspan=2| On ([[close Over]])
Line 186: Line 182:
| <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>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 operator|Cut]]
| <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| 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|Under]]
| <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>m</syntaxhighlight> || <syntaxhighlight lang=apl inline>g</syntaxhighlight> || <syntaxhighlight lang=apl inline>mg</syntaxhighlight> ||                                        ||rowspan="2"|With ([[Bind]])    ||
Line 196: Line 192:
| <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>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>  || [[Alternant]]                   || [[Inner Product|Inner-product]]
| <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>  ||                                || [[Tie]], [[Outer Product|Outer-product]]
|-
|-
| <syntaxhighlight lang=apl inline>.</syntaxhighlight> || <syntaxhighlight lang=apl inline>f</syntaxhighlight> || <syntaxhighlight lang=apl inline>m</syntaxhighlight> || <syntaxhighlight lang=apl inline>mf</syntaxhighlight> ||                                       || [[Ply]]                         ||
| <syntaxhighlight lang=apl inline>.</syntaxhighlight> || <syntaxhighlight lang=apl inline>m</syntaxhighlight> || <syntaxhighlight lang=apl inline>g</syntaxhighlight> ||                                    || <syntaxhighlight lang=apl inline>∞  ∞</syntaxhighlight> ||                                 || [[Outer Product]]
|}
|}


Line 291: Line 285:
| 35 || 1980-08-15 ||  ||            || Peter Wooster        || Extended [[Grade|Upgrade and Downgrade]]
| 35 || 1980-08-15 ||  ||            || Peter Wooster        || Extended [[Grade|Upgrade and Downgrade]]
|-
|-
| 36 || 1980-04-20 ||  ||            || [[Ken Iverson]]      || [[Direct definition|Direct Definition]]
| 36 || 1980-04-20 ||  ||            || [[Ken Iverson]]      || [[Direct definition (notation)|Direct Definition]]
|-
|-
| 37 ||            || 1 || 1982-06-01 || John D. Burger      || IBM 3270 User Guide
| 37 ||            || 1 || 1982-06-01 || John D. Burger      || IBM 3270 User Guide

Latest revision as of 03:25, 11 May 2024

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.

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 names and system commands, or improved performance. Release number 18 was apparently skipped.

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] Improvements in internal architecture
19 1987-03 Short left argument for Take/Drop; Table ()[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 See Scalar
Conditional enclose ∞ ∞ Link
> 0 Disclose See Scalar
, Ravel ∞ ∞ Catenate
Table ∞ ∞ Catenate First
1 Reverse 0 1 Rotate
Reverse First ∞ ∞ Rotate First
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 First
\ f Scan
f Scan First
/ m Replicate
m Replicate First
\ m Expand
m Expand First
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 Dual
¨ m g mg With (Bind)
¨ f n mf
. f g 2 ∞ ∞ Determinant Inner Product
. m g ∞ ∞ Outer Product

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

  1. IPSA. SHARP APL Reference Manual Additions and Corrections, June 1981
  2. IPSA Newsletter July/August 1981 (pdf)
  3. IPSA Newsletter July/August 1982 (pdf)
  4. IPSA Newsletter November/December 1982 (pdf)
  5. "Language Extensions of May 1983". SATN-45, 1983-05-02.
  6. York University Computer Museum. SHARP APL collection catalogue.
  7. Robert Bernecky. An Introduction to Function Rank at APL88. APL Quote Quad, Volume 18, Issue 2. December 1987.
  8. IPSA. "SHARP APL Release 20.0: Guide for APL Programmers".
APL dialects [edit]
Maintained APL+WinAPL2APL64APL\ivApletteAprilCo-dfnsDyalog APLDyalog APL Visiondzaima/APLGNU APLKapNARS2000PometoTinyAPL
Historical A Programming LanguageA+ (A) ∙ APL#APL2CAPL\360APL/700APL\1130APL\3000APL.68000APL*PLUSAPL.jlAPL.SVAPLXExtended Dyalog APLIverson notationIVSYS/7090NARSngn/aplopenAPLOperators and FunctionsPATRowanSAXSHARP APLRationalized APLVisualAPL (APLNext) ∙ VS APLYork APL
Derivatives AHPLBQNCoSyELIGleeIIvyJJellyK (Goal, Klong, Q) ∙ KamilaLispLang5LilNialRADUiua
Overviews Comparison of APL dialectsTimeline of array languagesTimeline of influential array languagesFamily tree of array languages