APL\360: Difference between revisions

Jump to navigation Jump to search
2,958 bytes added ,  08:06, 5 June 2020
No edit summary
(15 intermediate revisions by one other user not shown)
Line 2: Line 2:
| array model              = [[flat array model|flat]] without [[box|boxes]]
| array model              = [[flat array model|flat]] without [[box|boxes]]
| index origin            = <source lang=apl inline>)ORIGIN</source> 0 or 1 (later <source lang=apl inline>⎕IO</source>)
| index origin            = <source lang=apl inline>)ORIGIN</source> 0 or 1 (later <source lang=apl inline>⎕IO</source>)
| function styles          = [[tradfn]]
| function styles          = [[defined function]]
| numeric types            = floats (64-bit [[wikipedia:IBM_hexadecimal_floating_point|HFP]])
| numeric types            = floats (64-bit [[wikipedia:IBM_hexadecimal_floating_point|HFP]])
| unicode support          = no
| unicode support          = no
| released                = 1967
| released                = 1968 (1966 within IBM)
| developer                = [[IBM]]
| developer                = [[IBM]]
| latest release version  = XM6 / 1972
| latest release version  = XM6 / 1972
Line 18: Line 18:
| run online              = [http://members.aon.at/nkehrer/ibm_5110/emu5110.html IBM 5110 emulator]
| run online              = [http://members.aon.at/nkehrer/ibm_5110/emu5110.html IBM 5110 emulator]
| influenced by            = [[Iverson notation]]
| influenced by            = [[Iverson notation]]
| influenced              = [[ISO 8485:1989]], [[ISO/IEC 13751:2001]], [[APLSV]], [[APL*PLUS]], [[J]]
| influenced              = [[ISO 8485:1989]], [[ISO/IEC 13751:2001]], [[APL.SV]], [[APL*PLUS]], [[J]]
}}
}}


Line 25: Line 25:
Beginning in 1975, the IBM 5100 line of microcomputers offered APL\360 as one of two built-in ROM-based interpreted languages for the computer, complete with a keyboard and display that supported all the special symbols used in the language.
Beginning in 1975, the IBM 5100 line of microcomputers offered APL\360 as one of two built-in ROM-based interpreted languages for the computer, complete with a keyboard and display that supported all the special symbols used in the language.


Significant developments to APL\360 included CMS/APL, which made use of the virtual storage capabilities of CMS and [[APLSV]], which introduced shared variables, system variables and system functions. It was subsequently ported to the IBM System/370 and VSPC platforms until its final release in 1983, after which it was replaced by [[APL2]].  
Significant developments to APL\360 included CMS/APL, which made use of the virtual storage capabilities of CMS, and [[APL.SV]], which introduced shared variables, [[system variable]]s and [[system function]]s. It was subsequently ported to the IBM System/370 and VSPC platforms until its final release in 1983, after which it was replaced by [[APL2]].  
[[File:IBM 5110.jpg|thumb|right|IBM 5110]]
[[File:IBM 5110.jpg|thumb|right|IBM 5110]]
== Availability ==
APL\360's implementation was completed in 1966, and it was made available within IBM from the [[wikipedia:Thomas J. Watson Research Center|Watson Research Center]] lab in [[wikipedia:Yorktown Heights, New York|Yorktown Heights]] starting in November. From the beginning it was an interactive rather than a batch system, with programmers working directly from a terminal rather than submitting jobs to be run. It was generally available only for IBM projects, with IBM's emphasis on [[wikipedia:PL/I|PL/I]] blocking its release as a standalone product, but was used in a few external projects including a 20-person class at [[wikipedia:NASA|NASA]]'s [[wikipedia:Goddard Space Flight Center|Goddard Space Flight Center]], and at the [[wikipedia:University of Alberta|University of Alberta]].<ref>Harold A. Driscoll. [https://dl.acm.org/doi/10.1145/586003.586005 "An APL Historical Note"]. [[APL Quote Quad]] Volume 8 Issue 1. 1977-09.</ref> [[Syracuse University]] also connected a terminal to Yorktown Heights starting in late 1967.<ref>Dana E. Cartwright and Phyllis A. Kent. "SHARP APL Syracuse" at [[IPSA '80]].</ref> In this period [[wikipedia:SUNY Binghamton|SUNY Binghamton]] became the first facility outside IBM to have APL installed, due to its connection with [[wikipedia:Endicott, New York|IBM-Endicott]].<ref name="foster">[[Ray Polivka]] and Jon McGrew. [https://dl.acm.org/doi/10.1145/216800.216805 "A Quote Quad Interview: Garth Foster"]. Quote Quad Volume 26 Number 1. 1995-09.</ref>
IBM released APL\360 in August 1968 ([[APL\1130]] had been released that spring)<ref>[[Adin Falkoff]]. [https://doi.org/10.1145/800012.808128 "APL\360 History"] ([https://www.jsoftware.com/papers/apl360history.htm web]) at [[APL69]].</ref> as a [[wikipedia:IBM Type-III Library|Type-III]] or unsupported library. In 1969 it was offered as one of IBM's first program products, initially for [[wikipedia:DOS/360|DOS/360]], and next with support for [[wikipedia:OS/360 and successors#MVT|MVT]].<ref>[[Adin Falkoff]]. "The IBM family of APL systems". ''[[IBM]] Systems Journal'' Vol. 30 No. 4. 1991.</ref> These products were primarily used by universities, but also rapidly produced interest in [[time-sharing]] APL, with at least eight companies offering time-sharing in 1968. Business use of APL\360 was limited by its lack of support for reading and writing files, a problem that would only be addressed in IBM products with [[APL.SV]] in 1973. Many companies instead used a derivative system such as [[APL*PLUS]] modified to support files.<ref>[[Eric Iverson]]. "The Integration of APL into the Larger World of Data Processing" at [[IPSA '80]].</ref>
== Implementation ==
== Implementation ==


Line 38: Line 44:


== Primitives ==
== Primitives ==
APL\360 evolved rapidly during its early development within IBM and more slowly as it became available to outside users. Here we show the primitives described in its [http://www.softwarepreservation.org/projects/apl/Manuals/APL360CONTRIBUTEDPROGRAMLIBRARY/view documentation] in 1968 when it was first released as a stand-alone product (a [[wikipedia:IBM Type-III Library|Type-III Library]]). Later additions include [[Matrix Inverse]] and [[Matrix Divide]]; [[Execute]], [[Format]], and [[Scan]] introduced by [[APL.SV]]; and an [[Function axis|axis]] and [[Laminate]] form for the [[Catenate]] function.


=== Functions ===
=== Functions ===
Line 52: Line 60:
| <source lang=apl inline>÷</source> || [[Reciprocal]]        || [[Divide]]
| <source lang=apl inline>÷</source> || [[Reciprocal]]        || [[Divide]]
|-
|-
| <source lang=apl inline>|</source> || [[Magnitude]]         || [[Residue]]
| <source lang=apl inline></source> || [[Ceiling]]           || [[Maximum]]
|-
|-
| <source lang=apl inline>⌊</source> || [[Floor]]            || [[Minimum]]
| <source lang=apl inline>⌊</source> || [[Floor]]            || [[Minimum]]
|-
|-
| <source lang=apl inline></source> || [[Ceiling]]           || [[Maximum]]
| <source lang=apl inline>*</source> || [[Exponential]]       || [[Power]]
|-
|-
| <source lang=apl inline>?</source> || [[Roll]]             || [[Deal]]
| <source lang=apl inline></source> || [[Natural logarithm]] || [[Logarithm]]
|-
|-
| <source lang=apl inline>*</source> || [[Exponential]]       || [[Power]]
| <source lang=apl inline>|</source> || [[Magnitude]]         || [[Residue]]
|-
|-
| <source lang=apl inline></source> || [[Natural logarithm]] || [[General logarithm]]
| <source lang=apl inline>?</source> || [[Roll]]             || [[Deal]]
|-
|-
| <source lang=apl inline>○</source> || [[Pi times]]          || [[Circle function|Circular, hyperbolic, and pythagorean functions]]
| <source lang=apl inline>○</source> || [[Pi times]]          || [[Circle function|Circular]]
|-
|-
| <source lang=apl inline>!</source> || [[Factorial]]        || [[Binomial]]
| <source lang=apl inline>!</source> || [[Factorial]]        || [[Binomial coefficient]]
|-
|-
| <source lang=apl inline>~</source> || [[Not]]              ||
| <source lang=apl inline>~</source> || [[Not]]              ||
Line 90: Line 98:
| <source lang=apl inline>≠</source> ||                      || [[Not equal]]
| <source lang=apl inline>≠</source> ||                      || [[Not equal]]
|-
|-
| <source lang=apl inline>⍴</source> || [[Shape|Shape of]]   || [[Reshape]]
| <source lang=apl inline>⍴</source> || [[Shape|Size]]       || [[Reshape]]
|-
|-
| <source lang=apl inline>,</source> || [[Ravel]]            || [[Catenate|Catenate, Laminate]] (allows axis)
| <source lang=apl inline>,</source> || [[Ravel]]            || [[Catenate]]
|-
|-
| <source lang=apl inline></source> ||rowspan=2| [[Reverse]]<br>(allows axis) ||rowspan=2| [[Rotate]]<br>(allows axis)
| <source lang=apl inline>[]</source>||                       || [[Bracket indexing|Indexing]]
|-
|-
| <source lang=apl inline></source>
| <source lang=apl inline></source> || [[Index generator]]  || [[Index of]]
|-
| <source lang=apl inline>⍉</source> ||colspan=2| [[Transpose]]
|-
|-
| <source lang=apl inline>↑</source> ||                      || [[Take]]
| <source lang=apl inline>↑</source> ||                      || [[Take]]
|-
|-
| <source lang=apl inline>↓</source> ||                      || [[Drop]]
| <source lang=apl inline>↓</source> ||                      || [[Drop]]
|-
| <source lang=apl inline>⍋</source> || [[Grade up]]  (allows axis) ||
|-
| <source lang=apl inline>⍒</source> || [[Grade down]] (allows axis) ||
|-
|-
| <source lang=apl inline>/</source> ||                      ||rowspan=2| [[Compress]]<br>(allows axis)
| <source lang=apl inline>/</source> ||                      ||rowspan=2| [[Compress]]<br>(allows axis)
Line 112: Line 122:
| <source lang=apl inline>⍀</source> ||
| <source lang=apl inline>⍀</source> ||
|-
|-
| <source lang=apl inline>[]</source>||                       || [[Indexing]]
| <source lang=apl inline></source> ||rowspan=2| [[Reverse]]<br>(allows axis) ||rowspan=2| [[Rotate]]<br>(allows axis)
|-
| <source lang=apl inline>⊖</source>
|-
|-
| <source lang=apl inline></source> || [[Index generator]]  || [[Index of]]
| <source lang=apl inline></source> ||colspan=2| [[Transpose]]
|-
|-
| <source lang=apl inline>∊</source> ||                      || [[Membership]]
| <source lang=apl inline>∊</source> ||                      || [[Membership]]
|-
| <source lang=apl inline>⍋</source> || [[Grade up]]          ||
|-
| <source lang=apl inline>⍒</source> || [[Grade down]]        ||
|-
| <source lang=apl inline>⌹</source> || [[Matrix inverse]]    || [[Matrix division]]
|-
|-
| <source lang=apl inline>⊥</source> ||                      || [[Decode]]
| <source lang=apl inline>⊥</source> ||                      || [[Decode]]
|-
|-
| <source lang=apl inline>⊤</source> ||                      || [[Encode]]
| <source lang=apl inline>⊤</source> ||                      || [[Encode]]
|-
| <source lang=apl inline>⍎</source> ||                      || [[Execute]]
|-
| <source lang=apl inline>⍕</source> || [[Monadic format]]    || [[Dyadic format]]
|}
|}


Line 143: Line 145:
|-
|-
| <source lang=apl inline>⌿</source>  || Monadic ||
| <source lang=apl inline>⌿</source>  || Monadic ||
|-
| <source lang=apl inline>\</source>  || Monadic ||rowspan=2| [[Scan]]<br>(allows axis)      ||
|-
| <source lang=apl inline>⍀</source>  || Monadic ||
|-
|-
| <source lang=apl inline>.</source>  || Dyadic  ||                        || [[Inner product]]
| <source lang=apl inline>.</source>  || Dyadic  ||                        || [[Inner product]]
Line 155: Line 153:
|}
|}


=== External links ===
== References ==
<references/>
 
== External links ==
* Bitsavers: [http://www.bitsavers.org/pdf/ibm/apl/ APL]
* Bitsavers: [http://www.bitsavers.org/pdf/ibm/apl/ APL]
* Norbert Kehrer: [http://members.aon.at/nkehrer/ibm_5110/emu5110.html IBM 5110 Emulator]
* Norbert Kehrer: [http://members.aon.at/nkehrer/ibm_5110/emu5110.html IBM 5110 Emulator]
* Bitsavers: [http://www.bitsavers.org/pdf/ibm/5110/ IBM 5110]
* Bitsavers: [http://www.bitsavers.org/pdf/ibm/5110/ IBM 5110]
{{APL dialects}}
{{APL dialects}}[[Category:IBM APL dialects]][[Category:Flat array languages]]
trusted
183

edits

Navigation menu