# 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:

`+` 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:

`⍳` 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

1. Adin Falkoff and Ken Iverson. The Design of APL. IBM Journal of Research and Development, Volume 17, Number 4. 1973-07.
2. Philip Abrams. An interpreter for Iverson notation. 1966-08-17.
3. Adin Falkoff and Ken Iverson. The Evolution of APL. ACM SIGPLAN Notices Volume 13, Number 8. 1978-08.
APL dialects 
Maintained APL+WinAPL2APL64APL\ivApletteAprilCo-dfnsDyalog APLDyalog APL Visiondzaima/APLGNU APLKapNARS2000Pometo
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