IVSYS/7090
IVSYS/7090 (for "Iverson System" on the IBM 7090) was a proto-APL interpreter in FORTRAN. It was implemented by Larry Breed, who worked in Ken Iverson's group at IBM's Watson Research Center, and Phil Abrams, a graduate student at 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.^{[1]} However, it had substantial differences from APL as realized in APL\360, for example using the arrows ↑
and ↓
for rotation rather than Take and Drop.^{[2]} 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.^{[3]} 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, TSS/360. The machine IVSYS itself ran on was at some point put on a shipping platform and taken to an unknown destination.^{[4]}
Primitives
Simple unary and binary operators ("sops"), which would be called scalar monadic and dyadic functions in today's terminology:
Glyph | Monadic | Dyadic |
---|---|---|
+ |
Identity | Addition |
- |
Negate | Subtraction |
× |
Multiplication | |
÷ |
Division | |
⌊ |
Floor | Minimum |
⌈ |
Ceiling | Maximum |
| |
Absolute value | Modulus |
* |
Exponential | Exponentiation |
~ |
Complement (Not) | |
∧ |
Logical AND | |
∨ |
Logical OR | |
< |
Less than | |
≤ |
Less than or Equal to | |
= |
Equal to | |
≠ |
Not Equal to | |
≥ |
Greater than or Equal to | |
> |
Greater than |
Other operators ("oops"), called mixed functions in today's terminology:
Glyph | Monadic | Dyadic |
---|---|---|
⍳ |
Interval vector | Index vector (Index of) |
⍴ |
Rank vector (Shape) | Replication (Reshape) |
, |
Ravel | Catenate |
↑ |
Rotate left 1 | Left rotation |
↓ |
Rotate right 1 | Right rotation |
⍺ |
Prefix vector | |
⍵ |
Suffix vector | |
∊ |
Characteristic vector (Member of) | |
⊥ |
Base 2 value | Base value |
⊤ |
Representation |
The following primitive operations exist, with syntax as in modern APL, but are not classified as operators. All forms of /
and \
allow an axis to be specified with brackets.
Glyph | Definition |
---|---|
[] |
Indexing |
/ |
Reduction |
/ |
Compression |
\ |
Expansion |
. |
Generalized matrix product (Inner product) |
∘. |
Outer product |
References
- ↑ Adin Falkoff and Ken Iverson. The Design of APL. IBM Journal of Research and Development, Volume 17, Number 4. 1973-07.
- ↑ Philip Abrams. An interpreter for Iverson notation. 1966-08-17.
- ↑ Adin Falkoff and Ken Iverson. The Evolution of APL. ACM SIGPLAN Notices Volume 13, Number 8. 1978-08.
- ↑ Eugene McDonnell. The Socio-Technical Beginnings of APL.
APL dialects [edit] | |
---|---|
Maintained | APL+Win ∙ APL2 ∙ APL64 ∙ APL\iv ∙ Aplette ∙ April ∙ Co-dfns ∙ Dyalog APL ∙ Dyalog APL Vision ∙ dzaima/APL ∙ GNU APL ∙ Kap ∙ NARS2000 ∙ Pometo |
Historical | A Programming Language ∙ A+ (A) ∙ APL# ∙ APL2C ∙ APL\360 ∙ APL/700 ∙ APL\1130 ∙ APL\3000 ∙ APL.68000 ∙ APL*PLUS ∙ APL.jl ∙ APL.SV ∙ APLX ∙ Extended Dyalog APL ∙ Iverson notation ∙ IVSYS/7090 ∙ NARS ∙ ngn/apl ∙ openAPL ∙ Operators and Functions ∙ PAT ∙ Rowan ∙ SAX ∙ SHARP APL ∙ Rationalized APL ∙ VisualAPL (APLNext) ∙ VS APL ∙ York APL |
Derivatives | AHPL ∙ BQN ∙ CoSy ∙ ELI ∙ Glee ∙ I ∙ Ivy ∙ J ∙ Jelly ∙ K (Goal, Klong, Q) ∙ KamilaLisp ∙ Lang5 ∙ Lil ∙ Nial ∙ RAD ∙ Uiua |
Overviews | Comparison of APL dialects ∙ Timeline of array languages ∙ Timeline of influential array languages ∙ Family tree of array languages |