APL/700: Difference between revisions

Jump to navigation Jump to search
3,559 bytes added ,  18:40, 6 June 2021
(Created page with "{{Infobox array language | array model = flat without boxes | index origin = 0 or 1 | function styles = define...")
 
(9 intermediate revisions by 2 users not shown)
Line 3: Line 3:
| index origin            = 0 or 1
| index origin            = 0 or 1
| function styles          = [[defined function]]
| function styles          = [[defined function]]
| numeric types            = 64-bit float
| numeric types            = 48-bit float
| unicode support          = no
| unicode support          = no
| released                = November 15, 1976
| implementation language  = [[wikipedia:ALGOL 60|ALGOL 60]]
| developer                = [[wikipedia:Burroughs Corporation|Burroughs Corporation]]
| developer                = [[wikipedia:Burroughs Corporation|Burroughs Corporation]]
| platforms                = [[wikipedia:Burroughs_large_systems#B6700_and_B7700|B 6700/B 7700]]
| platforms                = [[wikipedia:Burroughs_large_systems#B6700_and_B7700|B 6700/B 7700]]
| operating systems        = [[wikipedia:Burroughs MCP|Burroughs MCP]]
| operating systems        = [[wikipedia:Burroughs MCP|Burroughs MCP]]
| documentation            = [http://www.softwarepreservation.org/projects/apl/Manuals/APL700UserReferenceManual User Reference Manual (pdf)]
| documentation            = [http://www.softwarepreservation.org/projects/apl/Manuals/APL700UserReferenceManual User Reference Manual (pdf)]
| influenced by            = [[APL\360]]
| influenced by            = [[APL\360]], [[APL.SV]]
}}
}}
''APL/700''' was an APL implementation by [[wikipedia:Burroughs Corporation]] for their B6700/B7700 line of mainframe computers. The language was mostly identical to that of [[APL\360]] and its successors, but differed in a few details:
'''APL/700''' was an APL implementation by [[wikipedia:Burroughs Corporation|Burroughs Corporation]] for their [[wikipedia:Burroughs_large_systems|700 series]] of mainframe computers.
* The statement separator was a semicolon (<source lang=apl inline>;</source>) rather than the conventional diamond <source lang=apl inline>¨</source> and statements in such a so-called ''list'' were evaluated from right to left, much as if the semicolon was the Left [[identity]] function (<source lang=apl inline>⊣</source>).
 
The system was written in [[wikipedia:Paoli, Pennsylvania|Paoli]], by Jim Ryan, Glenn Martin, Jim Williams, and Ken Carvin. Ron Murray joined the team in 1974. Due to the physical location, just outside of Philadelphia, the team had close contact with [[Ken Iverson]] and [[Adin Falkoff]], who were at the [[IBM]]'s [[wikipedia:Philadelphia]] office at that time.
 
Though an an independent [[wikipedia:ALGOL 60|ALGOL 60]] implementation, it was based on the ideas from APL\360, and borrowed some ideas from [[APL.SV]].<ref>Private email from Ron Murray. 25 May  2001.</ref>
 
== Unique features ==
Despite its similarity However, it also differed in quite a few details:<ref>[[wikipedia:Burroughs Corporation|Burroughs Corporation]]. [http://www.softwarepreservation.org/projects/apl/Manuals/APL700UserReferenceManual User Reference Manual] (5000813). 1975.</ref>
* The statement separator was a semicolon (<source lang=apl inline>;</source>) rather than the conventional diamond <source lang=apl inline></source> and statements in such a so-called ''list'' were evaluated from right to left, much as if the semicolon was the Left [[identity]] function (<source lang=apl inline>⊣</source>).
* In primitive pairs with both a last and first [[axis]] version, for example <source lang=apl inline>/</source> vs <source lang=apl inline>⌿</source> and <source lang=apl inline>⌽</source> vs <source lang=apl inline>⊖</source>, the first axis version would use the [[function axis]] syntax to indicate the applicable axis counted from the ''last'' axis rather than from the first axis. For example <source lang=apl inline>⊖[1]</source> was equivalent to <source lang=apl inline>⌽</source> just like <source lang=apl inline>⌽[1]</source> was equivalent to <source lang=apl inline>⊖</source>.
* In primitive pairs with both a last and first [[axis]] version, for example <source lang=apl inline>/</source> vs <source lang=apl inline>⌿</source> and <source lang=apl inline>⌽</source> vs <source lang=apl inline>⊖</source>, the first axis version would use the [[function axis]] syntax to indicate the applicable axis counted from the ''last'' axis rather than from the first axis. For example <source lang=apl inline>⊖[1]</source> was equivalent to <source lang=apl inline>⌽</source> just like <source lang=apl inline>⌽[1]</source> was equivalent to <source lang=apl inline>⊖</source>.
* While in general reduction using scalar functions were supported by for arrays of a compatible data type (numeric or character), <source lang=apl inline>=/</source> and <source lang=apl inline>≠/</source> did not support character data.
* While in general reduction using scalar functions were supported by for arrays of a compatible data type (numeric or character), <source lang=apl inline>=/</source> and <source lang=apl inline>≠/</source> did not support character data.
* APL/700 included [[modified assignment]], but the pass-through value was the new value of the updated array.
* APL/700 included [[modified assignment]], but the pass-through value was the new value of the updated array.
* More [[set functions]] were included than even modern APLs have. In particular <source lang=apl inline>⊂</source> and <source lang=apl inline>⊂</source> were Subset and Superset, though not strict subset and superset, but rather as <source lang=apl inline>{∧/(,a)∊(,⍵)}</source> and <source lang=apl inline>{∧/(,⍵)∊(,⍺)}</source>. Further-more, all the set functions except for Membership were defined in terms of the [[ravel]] of the arguments, and thus always returned a [[vector]].
* More [[set functions]] were included than even modern APLs have. In particular <source lang=apl inline>⊂</source> and <source lang=apl inline>⊂</source> were Subset and Superset, though not strict subset and superset, but rather as <source lang=apl inline>{∧/(,)∊(,⍵)}</source> and <source lang=apl inline>{∧/(,⍵)∊(,⍺)}</source>. All the set functions except for Membership were defined in terms of the [[ravel]] of the arguments, and thus always returned a [[vector]]. Furthermore, [[Union]] (<source lang=apl inline>∪</source>), [[Intersection]] (<source lang=apl inline>∩</source>), and [[Set difference]] (<source lang=apl inline>~</source>) returned only [[Unique]] elements, that is, a vector with no duplicates.
* Format <source lang=apl inline>⍕</source> allowed an advanced formatting specification through a character left argument.
* Many additional [[quad name]]s were available, including a set of two-letter system functions with all the combinations of S/R/Q (for Stop, Reset, Query) with T/S/M (Trace, Stop, Monitor), and character constants for control characters (<source lang=apl inline>⎕B</source>, <source lang=apl inline>⎕L</source>, <source lang=apl inline>⎕R</source>, <source lang=apl inline>⎕T</source>, and <source lang=apl inline>⎕N</source> for Backspace, Linefeed, Return, Tab, and Null), the [[digits]] <source lang=apl inline>⎕D</source>, and the [[alphabet]] (<source lang=apl inline>⎕A</source>).
* In a manner similar to, but more extensively than the much later [[APLX]], APL/700 had [[primitive function]]s for file operations. In addition to <source lang=apl inline>⍇</source> and <source lang=apl inline>⍈</source> for read and write operations (as in APLX), it supported the following:
** <source lang=apl inline>⍍</source> to create, rename and change password for files, and <source lang=apl inline>⍔</source> for deleting files.
** <source lang=apl inline>⍃</source> and <source lang=apl inline>⍄</source> were used to read+pop and append components to the beginning and end of a file, respectively.
** Equivalents of normal primitive functions for operations on component of files as if they were elements of a vectors: <source lang=apl inline>⍐</source> and <source lang=apl inline>⍗</source> acted like [[Take]] and [[Drop]] (<source lang=apl inline>↑</source> and <source lang=apl inline>↓</source>). <source lang=apl inline>⌼</source> would [[Reverse]] and [[Rotate]] (<source lang=apl inline>⌽</source>). <source lang=apl inline>⍁</source> and <source lang=apl inline>⍂</source> were [[Compress]] and [[Expand]] (<source lang=apl inline>/</source> and <source lang=apl inline>\</source>).
** <source lang=apl inline>⍓</source> and <source lang=apl inline>⍌</source> and <source lang=apl inline>⍗</source> were used to hold, free, and release a file.
** <source lang=apl inline>⌸</source> and <source lang=apl inline>⍯</source> returned maps for non-null and null components, respectively.
** <source lang=apl inline>⌻</source> provided meta information about a file or the file system.
 
== References ==
<references/>
{{APL dialects}}[[Category:APL dialects]][[Category:Flat array languages]]

Navigation menu