2,954
edits
(Created page with "{{Infobox array language | array model = flat without boxes | index origin = 1 | function styles = defined function | numeric types = integer, float | unicode support = no | released = 1965 | developer = Larry Breed (IBM), Phil Abrams | implementation language = wikipedia:FORTRAN | platforms = wikipedia:IBM 7090 | ope...") |
(Primitives) |
||
Line 16: | Line 16: | ||
'''IVSYS/7090''' (for "Iverson System" on the [[wikipedia:IBM 7090|IBM 7090]]) was a proto-APL interpreter in [[wikipedia:FORTRAN|FORTRAN]]. It was implemented by [[Larry Breed]], who worked in [[Ken Iverson]]'s group at [[IBM]]'s [[wikipedia:Thomas J. Watson Research Center|Thomas J. Watson Research Center]], and [[Phil Abrams]], a graduate student at [[wikipedia:Stanford University|Stanford University]]. Running in 1965, the interpreter was the second computer implementation of [[Iverson notation]], after [[PAT]], and is often considered the first APL implementation, as it preceded [[APL\360]].<ref>[[Adin Falkoff]] and [[Ken Iverson]]. [https://www.jsoftware.com/papers/APLDesign.htm The Design of APL]. IBM Journal of Research and Development, Volume 17, Number 4. 1973-07.</ref> However, it had substantial differences from APL as realized in APL\360, for example using the arrows <syntaxhighlight lang=apl inline>↑</syntaxhighlight> and <syntaxhighlight lang=apl inline>↓</syntaxhighlight> for [[Rotate|rotation]] rather than [[Take]] and [[Drop]].<ref>[[Philip Abrams]]. [http://infolab.stanford.edu/TR/CS-TR-66-47.html An interpreter for Iverson notation]. 1966-08-17.</ref> Initially the program had to entered with punch cards, encoding symbols as multiple characters. However, it was soon adapted to run with a typewriter and [[type ball]], and made available within IBM using the Time Sharing Monitor (TSM), an early [[time sharing]] system.<ref>[[Adin Falkoff]] and [[Ken Iverson]]. [https://www.jsoftware.com/papers/APLEvol.htm The Evolution of APL]. ACM SIGPLAN Notices Volume 13, Number 8. 1978-08.</ref> Ken Iverson and [[Adin Falkoff]] were able to use the system in teaching, and [[Eric Iverson]] to prepare an answer book for the problems in Ken's ''Elementary Functions''. IVSYS was only available in this way for a short time, as the TSM project was terminated to make programmers available for a similar project, [[wikipedia:TSS/360|TSS/360]]. The machine IVSYS itself ran on was at some point put on a shipping platform and taken to an unknown destination.<ref>[[Eugene McDonnell]]. [https://www.jsoftware.com/papers/eem/socio1.htm The Socio-Technical Beginnings of APL].</ref> | '''IVSYS/7090''' (for "Iverson System" on the [[wikipedia:IBM 7090|IBM 7090]]) was a proto-APL interpreter in [[wikipedia:FORTRAN|FORTRAN]]. It was implemented by [[Larry Breed]], who worked in [[Ken Iverson]]'s group at [[IBM]]'s [[wikipedia:Thomas J. Watson Research Center|Thomas J. Watson Research Center]], and [[Phil Abrams]], a graduate student at [[wikipedia:Stanford University|Stanford University]]. Running in 1965, the interpreter was the second computer implementation of [[Iverson notation]], after [[PAT]], and is often considered the first APL implementation, as it preceded [[APL\360]].<ref>[[Adin Falkoff]] and [[Ken Iverson]]. [https://www.jsoftware.com/papers/APLDesign.htm The Design of APL]. IBM Journal of Research and Development, Volume 17, Number 4. 1973-07.</ref> However, it had substantial differences from APL as realized in APL\360, for example using the arrows <syntaxhighlight lang=apl inline>↑</syntaxhighlight> and <syntaxhighlight lang=apl inline>↓</syntaxhighlight> for [[Rotate|rotation]] rather than [[Take]] and [[Drop]].<ref>[[Philip Abrams]]. [http://infolab.stanford.edu/TR/CS-TR-66-47.html An interpreter for Iverson notation]. 1966-08-17.</ref> Initially the program had to entered with punch cards, encoding symbols as multiple characters. However, it was soon adapted to run with a typewriter and [[type ball]], and made available within IBM using the Time Sharing Monitor (TSM), an early [[time sharing]] system.<ref>[[Adin Falkoff]] and [[Ken Iverson]]. [https://www.jsoftware.com/papers/APLEvol.htm The Evolution of APL]. ACM SIGPLAN Notices Volume 13, Number 8. 1978-08.</ref> Ken Iverson and [[Adin Falkoff]] were able to use the system in teaching, and [[Eric Iverson]] to prepare an answer book for the problems in Ken's ''Elementary Functions''. IVSYS was only available in this way for a short time, as the TSM project was terminated to make programmers available for a similar project, [[wikipedia:TSS/360|TSS/360]]. The machine IVSYS itself ran on was at some point put on a shipping platform and taken to an unknown destination.<ref>[[Eugene McDonnell]]. [https://www.jsoftware.com/papers/eem/socio1.htm The Socio-Technical Beginnings of APL].</ref> | ||
== Primitives == | |||
Simple binary operators (sops): | |||
{| class=wikitable | |||
! Glyph !! Monadic !! Dyadic | |||
|- | |||
| <syntaxhighlight lang=apl inline>+</syntaxhighlight> || [[Identity]] || [[Addition]] | |||
|- | |||
| <syntaxhighlight lang=apl inline>-</syntaxhighlight> || [[Negate]] || [[Subtraction]] | |||
|- | |||
| <syntaxhighlight lang=apl inline>×</syntaxhighlight> || || [[Multiplication]] | |||
|- | |||
| <syntaxhighlight lang=apl inline>÷</syntaxhighlight> || || [[Division]] | |||
|- | |||
| <syntaxhighlight lang=apl inline>⌊</syntaxhighlight> || [[Floor]] || [[Minimum]] | |||
|- | |||
| <syntaxhighlight lang=apl inline>⌈</syntaxhighlight> || [[Ceiling]] || [[Maximum]] | |||
|- | |||
| <syntaxhighlight lang=apl inline>|</syntaxhighlight> || [[Absolute value]] || [[Modulus]] | |||
|- | |||
| <syntaxhighlight lang=apl inline>*</syntaxhighlight> || [[Exponential]] || [[Exponentiation]] | |||
|- | |||
| <syntaxhighlight lang=apl inline>~</syntaxhighlight> || Complement ([[Not]]) || | |||
|- | |||
| <syntaxhighlight lang=apl inline>∧</syntaxhighlight> || || [[And|Logical AND]] | |||
|- | |||
| <syntaxhighlight lang=apl inline>∨</syntaxhighlight> || || [[Or|Logical OR]] | |||
|- | |||
| <syntaxhighlight lang=apl inline><</syntaxhighlight> || || [[Less than]] | |||
|- | |||
| <syntaxhighlight lang=apl inline>≤</syntaxhighlight> || || [[Less than or Equal to]] | |||
|- | |||
| <syntaxhighlight lang=apl inline>=</syntaxhighlight> || || [[Equal to]] | |||
|- | |||
| <syntaxhighlight lang=apl inline>≠</syntaxhighlight> || || [[Not Equal to]] | |||
|- | |||
| <syntaxhighlight lang=apl inline>≥</syntaxhighlight> || || [[Greater than or Equal to]] | |||
|- | |||
| <syntaxhighlight lang=apl inline>></syntaxhighlight> || || [[Greater than]] | |||
|} | |||
Other operators (oops): | |||
{| class=wikitable | |||
! Glyph !! Monadic !! Dyadic | |||
|- | |||
| <syntaxhighlight lang=apl inline>⍳</syntaxhighlight> || [[Interval vector]] || Index vector ([[Index of]]) | |||
|- | |||
| <syntaxhighlight lang=apl inline>⍴</syntaxhighlight> || Rank vector ([[Shape]]) || Replication ([[Reshape]]) | |||
|- | |||
| <syntaxhighlight lang=apl inline>,</syntaxhighlight> || [[Ravel]] || [[Catenate]] | |||
|- | |||
| <syntaxhighlight lang=apl inline>↑</syntaxhighlight> || Rotate left 1 || [[Rotate|Left rotation]] | |||
|- | |||
| <syntaxhighlight lang=apl inline>↓</syntaxhighlight> || Rotate right 1 || [[Rotate|Right rotation]] | |||
|- | |||
| <syntaxhighlight lang=apl inline>⍺</syntaxhighlight> || || Prefix vector | |||
|- | |||
| <syntaxhighlight lang=apl inline>⍵</syntaxhighlight> || || Suffix vector | |||
|- | |||
| <syntaxhighlight lang=apl inline>∊</syntaxhighlight> || || Characteristic vector ([[Member of]]) | |||
|- | |||
| <syntaxhighlight lang=apl inline>⊥</syntaxhighlight> || Base 2 value || [[Decode|Base value]] | |||
|- | |||
| <syntaxhighlight lang=apl inline>⊤</syntaxhighlight> || || [[Encode|Representation]] | |||
|} | |||
The following primitive operations exist, with syntax as in modern APL, but are not classified as operators. All forms of <syntaxhighlight lang=apl inline>/</syntaxhighlight> and <syntaxhighlight lang=apl inline>\</syntaxhighlight> allow an [[Function axis|axis]] to be specified with brackets. | |||
{| class=wikitable | |||
! Glyph !! Definition | |||
|- | |||
| <syntaxhighlight lang=apl inline>[]</syntaxhighlight> || [[Bracket indexing|Indexing]] | |||
|- | |||
| <syntaxhighlight lang=apl inline>/</syntaxhighlight> || [[Reduction]] | |||
|- | |||
| <syntaxhighlight lang=apl inline>/</syntaxhighlight> || [[Compression]] | |||
|- | |||
| <syntaxhighlight lang=apl inline>\</syntaxhighlight> || [[Expansion]] | |||
|- | |||
| <syntaxhighlight lang=apl inline>.</syntaxhighlight> || Generalized matrix product ([[Inner product]]) | |||
|- | |||
| <syntaxhighlight lang=apl inline>∘.</syntaxhighlight> || [[Outer product]] | |||
|} | |||
== References == | == References == | ||
<references/> | <references/> | ||
{{APL dialects}}[[Category:IBM APL dialects]][[Category:Flat array languages]] | {{APL dialects}}[[Category:IBM APL dialects]][[Category:Flat array languages]] |