APL/700: Difference between revisions

From APL Wiki
Jump to navigation Jump to search
m (Text replacement - "<source" to "<syntaxhighlight")
m (Text replacement - "</source>" to "</syntaxhighlight>")
Line 20: Line 20:
== Unique features ==
== 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>
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 (<syntaxhighlight lang=apl inline>;</source>) rather than the conventional diamond <syntaxhighlight 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 (<syntaxhighlight lang=apl inline>⊣</source>).
* The statement separator was a semicolon (<syntaxhighlight lang=apl inline>;</syntaxhighlight>) rather than the conventional diamond <syntaxhighlight lang=apl inline>⋄</syntaxhighlight> and statements in such a so-called ''list'' were evaluated from right to left, much as if the semicolon was the Left [[identity]] function (<syntaxhighlight lang=apl inline>⊣</syntaxhighlight>).
* In primitive pairs with both a last and first [[axis]] version, for example <syntaxhighlight lang=apl inline>/</source> vs <syntaxhighlight lang=apl inline>⌿</source> and <syntaxhighlight lang=apl inline>⌽</source> vs <syntaxhighlight 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 <syntaxhighlight lang=apl inline>⊖[1]</source> was equivalent to <syntaxhighlight lang=apl inline>⌽</source> just like <syntaxhighlight lang=apl inline>⌽[1]</source> was equivalent to <syntaxhighlight lang=apl inline>⊖</source>.
* In primitive pairs with both a last and first [[axis]] version, for example <syntaxhighlight lang=apl inline>/</syntaxhighlight> vs <syntaxhighlight lang=apl inline>⌿</syntaxhighlight> and <syntaxhighlight lang=apl inline>⌽</syntaxhighlight> vs <syntaxhighlight lang=apl inline>⊖</syntaxhighlight>, 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 <syntaxhighlight lang=apl inline>⊖[1]</syntaxhighlight> was equivalent to <syntaxhighlight lang=apl inline>⌽</syntaxhighlight> just like <syntaxhighlight lang=apl inline>⌽[1]</syntaxhighlight> was equivalent to <syntaxhighlight lang=apl inline>⊖</syntaxhighlight>.
* While in general reduction using scalar functions were supported by for arrays of a compatible data type (numeric or character), <syntaxhighlight lang=apl inline>=/</source> and <syntaxhighlight 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), <syntaxhighlight lang=apl inline>=/</syntaxhighlight> and <syntaxhighlight lang=apl inline>≠/</syntaxhighlight> 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 <syntaxhighlight lang=apl inline>⊂</source> and <syntaxhighlight lang=apl inline>⊂</source> were Subset and Superset, though not strict subset and superset, but rather as <syntaxhighlight lang=apl inline>{∧/(,⍺)∊(,⍵)}</source> and <syntaxhighlight 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]] (<syntaxhighlight lang=apl inline>∪</source>), [[Intersection]] (<syntaxhighlight lang=apl inline>∩</source>), and [[Set difference]] (<syntaxhighlight lang=apl inline>~</source>) returned only [[Unique]] elements, that is, a vector with no duplicates.  
* More [[set functions]] were included than even modern APLs have. In particular <syntaxhighlight lang=apl inline>⊂</syntaxhighlight> and <syntaxhighlight lang=apl inline>⊂</syntaxhighlight> were Subset and Superset, though not strict subset and superset, but rather as <syntaxhighlight lang=apl inline>{∧/(,⍺)∊(,⍵)}</syntaxhighlight> and <syntaxhighlight lang=apl inline>{∧/(,⍵)∊(,⍺)}</syntaxhighlight>. 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]] (<syntaxhighlight lang=apl inline>∪</syntaxhighlight>), [[Intersection]] (<syntaxhighlight lang=apl inline>∩</syntaxhighlight>), and [[Set difference]] (<syntaxhighlight lang=apl inline>~</syntaxhighlight>) returned only [[Unique]] elements, that is, a vector with no duplicates.  
* Format <syntaxhighlight lang=apl inline>⍕</source> allowed an advanced formatting specification through a character left argument.
* Format <syntaxhighlight lang=apl inline>⍕</syntaxhighlight> 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 (<syntaxhighlight lang=apl inline>⎕B</source>, <syntaxhighlight lang=apl inline>⎕L</source>, <syntaxhighlight lang=apl inline>⎕R</source>, <syntaxhighlight lang=apl inline>⎕T</source>, and <syntaxhighlight lang=apl inline>⎕N</source> for Backspace, Linefeed, Return, Tab, and Null), the [[digits]] <syntaxhighlight lang=apl inline>⎕D</source>, and the [[alphabet]] (<syntaxhighlight lang=apl inline>⎕A</source>).
* 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 (<syntaxhighlight lang=apl inline>⎕B</syntaxhighlight>, <syntaxhighlight lang=apl inline>⎕L</syntaxhighlight>, <syntaxhighlight lang=apl inline>⎕R</syntaxhighlight>, <syntaxhighlight lang=apl inline>⎕T</syntaxhighlight>, and <syntaxhighlight lang=apl inline>⎕N</syntaxhighlight> for Backspace, Linefeed, Return, Tab, and Null), the [[digits]] <syntaxhighlight lang=apl inline>⎕D</syntaxhighlight>, and the [[alphabet]] (<syntaxhighlight lang=apl inline>⎕A</syntaxhighlight>).
* 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 <syntaxhighlight lang=apl inline>⍇</source> and <syntaxhighlight lang=apl inline>⍈</source> for read and write operations (as in APLX), it supported the following:
* 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 <syntaxhighlight lang=apl inline>⍇</syntaxhighlight> and <syntaxhighlight lang=apl inline>⍈</syntaxhighlight> for read and write operations (as in APLX), it supported the following:
** <syntaxhighlight lang=apl inline>⍍</source> to create, rename and change password for files, and <syntaxhighlight lang=apl inline>⍔</source> for deleting files.
** <syntaxhighlight lang=apl inline>⍍</syntaxhighlight> to create, rename and change password for files, and <syntaxhighlight lang=apl inline>⍔</syntaxhighlight> for deleting files.
** <syntaxhighlight lang=apl inline>⍃</source> and <syntaxhighlight lang=apl inline>⍄</source> were used to read+pop and append components to the beginning and end of a file, respectively.
** <syntaxhighlight lang=apl inline>⍃</syntaxhighlight> and <syntaxhighlight lang=apl inline>⍄</syntaxhighlight> 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: <syntaxhighlight lang=apl inline>⍐</source> and <syntaxhighlight lang=apl inline>⍗</source> acted like [[Take]] and [[Drop]] (<syntaxhighlight lang=apl inline>↑</source> and <syntaxhighlight lang=apl inline>↓</source>). <syntaxhighlight lang=apl inline>⌼</source> would [[Reverse]] and [[Rotate]] (<syntaxhighlight lang=apl inline>⌽</source>). <syntaxhighlight lang=apl inline>⍁</source> and <syntaxhighlight lang=apl inline>⍂</source> were [[Compress]] and [[Expand]] (<syntaxhighlight lang=apl inline>/</source> and <syntaxhighlight lang=apl inline>\</source>).
** Equivalents of normal primitive functions for operations on component of files as if they were elements of a vectors: <syntaxhighlight lang=apl inline>⍐</syntaxhighlight> and <syntaxhighlight lang=apl inline>⍗</syntaxhighlight> acted like [[Take]] and [[Drop]] (<syntaxhighlight lang=apl inline>↑</syntaxhighlight> and <syntaxhighlight lang=apl inline>↓</syntaxhighlight>). <syntaxhighlight lang=apl inline>⌼</syntaxhighlight> would [[Reverse]] and [[Rotate]] (<syntaxhighlight lang=apl inline>⌽</syntaxhighlight>). <syntaxhighlight lang=apl inline>⍁</syntaxhighlight> and <syntaxhighlight lang=apl inline>⍂</syntaxhighlight> were [[Compress]] and [[Expand]] (<syntaxhighlight lang=apl inline>/</syntaxhighlight> and <syntaxhighlight lang=apl inline>\</syntaxhighlight>).
** <syntaxhighlight lang=apl inline>⍓</source> and <syntaxhighlight lang=apl inline>⍌</source> and <syntaxhighlight lang=apl inline>⍗</source> were used to hold, free, and release a file.
** <syntaxhighlight lang=apl inline>⍓</syntaxhighlight> and <syntaxhighlight lang=apl inline>⍌</syntaxhighlight> and <syntaxhighlight lang=apl inline>⍗</syntaxhighlight> were used to hold, free, and release a file.
** <syntaxhighlight lang=apl inline>⌸</source> and <syntaxhighlight lang=apl inline>⍯</source> returned maps for non-null and null components, respectively.
** <syntaxhighlight lang=apl inline>⌸</syntaxhighlight> and <syntaxhighlight lang=apl inline>⍯</syntaxhighlight> returned maps for non-null and null components, respectively.
** <syntaxhighlight lang=apl inline>⌻</source> provided meta information about a file or the file system.
** <syntaxhighlight lang=apl inline>⌻</syntaxhighlight> provided meta information about a file or the file system.


== References ==
== References ==
<references/>
<references/>
{{APL dialects}}[[Category:APL dialects]][[Category:Flat array languages]]
{{APL dialects}}[[Category:APL dialects]][[Category:Flat array languages]]

Revision as of 21:20, 10 September 2022

APL/700 was an APL implementation by Burroughs Corporation for their 700 series of mainframe computers.

The system was written in 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 Philadelphia office at that time.

Though an an independent ALGOL 60 implementation, it was based on the ideas from APL\360, and borrowed some ideas from APL.SV.[1]

Unique features

Despite its similarity However, it also differed in quite a few details:[2]

  • The statement separator was a semicolon (;) rather than the conventional diamond and statements in such a so-called list were evaluated from right to left, much as if the semicolon was the Left identity function ().
  • In primitive pairs with both a last and first axis version, for example / vs and vs , 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 ⊖[1] was equivalent to just like ⌽[1] was equivalent to .
  • While in general reduction using scalar functions were supported by for arrays of a compatible data type (numeric or character), =/ and ≠/ did not support character data.
  • 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 and were Subset and Superset, though not strict subset and superset, but rather as {∧/(,⍺)∊(,⍵)} and {∧/(,⍵)∊(,⍺)}. 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 (), Intersection (), and Set difference (~) returned only Unique elements, that is, a vector with no duplicates.
  • Format allowed an advanced formatting specification through a character left argument.
  • Many additional quad names 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 (⎕B, ⎕L, ⎕R, ⎕T, and ⎕N for Backspace, Linefeed, Return, Tab, and Null), the digits ⎕D, and the alphabet (⎕A).
  • In a manner similar to, but more extensively than the much later APLX, APL/700 had primitive functions for file operations. In addition to and for read and write operations (as in APLX), it supported the following:
    • to create, rename and change password for files, and for deleting files.
    • and 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: and acted like Take and Drop ( and ). would Reverse and Rotate (). and were Compress and Expand (/ and \).
    • and and were used to hold, free, and release a file.
    • and returned maps for non-null and null components, respectively.
    • provided meta information about a file or the file system.

References

  1. Private email from Ron Murray. 25 May 2001.
  2. Burroughs Corporation. User Reference Manual (5000813). 1975.
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