trusted
183
edits
mNo edit summary |
|||
(14 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 = [[ | | 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 = | | 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]], [[ | | influenced = [[ISO 8485:1989]], [[ISO/IEC 13751:2001]], [[APL.SV]], [[APL*PLUS]], [[J]] | ||
}} | }} | ||
Line 27: | Line 27: | ||
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]]. | 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 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 lang=apl inline>*</source> || [[Exponential]] || [[Power]] | ||
|- | |- | ||
| <source lang=apl inline> | | <source lang=apl inline>⍟</source> || [[Natural logarithm]] || [[Logarithm]] | ||
|- | |- | ||
| <source lang=apl inline> | | <source lang=apl inline>|</source> || [[Magnitude]] || [[Residue]] | ||
|- | |- | ||
| <source lang=apl inline> | | <source lang=apl inline>?</source> || [[Roll]] || [[Deal]] | ||
|- | |- | ||
| <source lang=apl inline>○</source> || [[Pi times]] || [[Circle function|Circular | | <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| | | <source lang=apl inline>⍴</source> || [[Shape|Size]] || [[Reshape]] | ||
|- | |- | ||
| <source lang=apl inline>,</source> || [[Ravel]] || [[Catenate | | <source lang=apl inline>,</source> || [[Ravel]] || [[Catenate]] | ||
|- | |- | ||
| <source lang=apl inline> | | <source lang=apl inline>[]</source>|| || [[Bracket indexing|Indexing]] | ||
|- | |- | ||
| <source lang=apl inline> | | <source lang=apl inline>⍳</source> || [[Index generator]] || [[Index of]] | ||
| | |||
|- | |- | ||
| <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 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 lang=apl inline>⍉</source> ||colspan=2| [[Transpose]] | ||
|- | |- | ||
| <source lang=apl inline>∊</source> || || [[Membership]] | | <source lang=apl inline>∊</source> || || [[Membership]] | ||
|- | |- | ||
| <source lang=apl inline>⊥</source> || || [[Decode]] | | <source lang=apl inline>⊥</source> || || [[Decode]] | ||
|- | |- | ||
| <source lang=apl inline>⊤</source> || || [[Encode]] | | <source lang=apl inline>⊤</source> || || [[Encode]] | ||
|} | |} | ||
Line 143: | Line 145: | ||
|- | |- | ||
| <source lang=apl inline>⌿</source> || Monadic || | | <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]] |