2,963
edits
No edit summary |
m (Text replacement - "Category:Array languages" to "") |
||
(6 intermediate revisions by 2 users not shown) | |||
Line 10: | Line 10: | ||
| documentation = [https://www.semanticscholar.org/paper/Experimental-personalized-array-translator-system-Hellerman/537d26ca8c4172cdd2976cffedef5422f61a00f2 ''Experimental personalized array translator system''] | | documentation = [https://www.semanticscholar.org/paper/Experimental-personalized-array-translator-system-Hellerman/537d26ca8c4172cdd2976cffedef5422f61a00f2 ''Experimental personalized array translator system''] | ||
| influenced by = [[Iverson notation]] | | influenced by = [[Iverson notation]] | ||
| influenced | | influenced = [[IVSYS/7090]] | ||
}} | }} | ||
The '''Personalized Array Translator''' ('''PAT''') was an early experimental system create by Dr. Herbert Hellerman of the [[IBM]] System Research Institute. It was the first implementation of [[Iverson Notation]] as a programming language, preceding even [[IVSYS/7090]]. [[Ken Iverson]] used the PAT system in his early work with students in the local secondary school, and had a profound influence on Iverson's notation, as can be seen in his book [https://code.jsoftware.com/wiki/Doc/Elementary_Functions_An_Algorithmic_Treatment ''Elementary Functions An Algorithmic Treatment'']. | The '''Personalized Array Translator''' ('''PAT''') was an early experimental system create by Dr. Herbert Hellerman of the [[IBM]] System Research Institute. It was the first implementation of [[Iverson Notation]] as a programming language, preceding even [[IVSYS/7090]]. [[Ken Iverson]] used the PAT system in his early work with students in the local secondary school, and had a profound influence on Iverson's notation, as can be seen in his book [https://code.jsoftware.com/wiki/Doc/Elementary_Functions_An_Algorithmic_Treatment ''Elementary Functions An Algorithmic Treatment'']. | ||
In lieu of most proper APL [[glyphs]], PAT used letters prefixed by the <code>@</code> symbol. [[Comparison functions]] were denoted by <code>@</code> followed by three digits 0 or 1, indicating whether the function would return 1 or 0 if the left argument would be less than, equal to, or greater than the right argument, respectively. The language only allowed application of one function per statement, with the result being assigned. Valid statements were:<ref>Hellerman, H. [https://www.semanticscholar.org/paper/Experimental-personalized-array-translator-system-Hellerman/537d26ca8c4172cdd2976cffedef5422f61a00f2 Experimental personalized array translator system]. Communications of the [[wikipedia:Association_for_Computing_Machinery|ACM]]. July 1964. | In lieu of most proper APL [[glyphs]], PAT used letters prefixed by the <code>@</code> symbol. [[Comparison functions]] were denoted by <code>@</code> followed by three digits 0 or 1, indicating whether the function would return 1 or 0 if the left argument would be less than, equal to, or greater than the right argument, respectively. The language only allowed application of one function per statement, with the result being assigned. Valid statements were:<ref>Hellerman, H. [https://www.semanticscholar.org/paper/Experimental-personalized-array-translator-system-Hellerman/537d26ca8c4172cdd2976cffedef5422f61a00f2 Experimental personalized array translator system]. Communications of the [[wikipedia:Association_for_Computing_Machinery|ACM]]. July 1964. https://doi.org/10.1145/364520.364573</ref> | ||
{| class=wikitable | {| class=wikitable | ||
! Name !! PAT statement !! Modern equivalent | ! Name !! PAT statement !! Modern equivalent | ||
|- | |- | ||
| [[Add]] || <code>Z = X + Y</code> || < | | [[Add]] || <code>Z = X + Y</code> || <syntaxhighlight lang=apl inline>Z ← X + Y</syntaxhighlight> | ||
|- | |- | ||
| [[Subtract]] || <code>Z = X - Y</code> || < | | [[Subtract]] || <code>Z = X - Y</code> || <syntaxhighlight lang=apl inline>Z ← X - Y</syntaxhighlight> | ||
|- | |- | ||
| [[Multiply]] || <code>Z = X * Y</code> || < | | [[Multiply]] || <code>Z = X * Y</code> || <syntaxhighlight lang=apl inline>Z ← X × Y</syntaxhighlight> | ||
|- | |- | ||
| [[Divide]] || <code>Z = X @D Y</code> || < | | [[Divide]] || <code>Z = X @D Y</code> || <syntaxhighlight lang=apl inline>Z ← X ÷ Y</syntaxhighlight> | ||
|- | |- | ||
| [[And]] || <code>Z = X @A Y</code> || < | | [[And]] || <code>Z = X @A Y</code> || <syntaxhighlight lang=apl inline>Z ← X ∧ Y</syntaxhighlight> | ||
|- | |- | ||
| [[Or]] || <code>Z = X @O Y</code> || < | | [[Or]] || <code>Z = X @O Y</code> || <syntaxhighlight lang=apl inline>Z ← X ∨ Y</syntaxhighlight> | ||
|- | |- | ||
| [[Constant]] Zero || <code>Z = X @000 Y</code> || < | | [[Constant]] Zero || <code>Z = X @000 Y</code> || <syntaxhighlight lang=apl inline>Z ← X(=≠=)Y</syntaxhighlight> | ||
|- | |- | ||
| [[Greater than]] || <code>Z = X @001 Y</code> || < | | [[Greater than]] || <code>Z = X @001 Y</code> || <syntaxhighlight lang=apl inline>Z ← X > Y</syntaxhighlight> | ||
|- | |- | ||
| [[Equal]] || <code>Z = X @010 Y</code> || < | | [[Equal]] || <code>Z = X @010 Y</code> || <syntaxhighlight lang=apl inline>Z ← X = Y</syntaxhighlight> | ||
|- | |- | ||
| [[Greater than or equal]] || <code>Z = X @011 Y</code> || < | | [[Greater than or equal]] || <code>Z = X @011 Y</code> || <syntaxhighlight lang=apl inline>Z ← X ≥ Y</syntaxhighlight> | ||
|- | |- | ||
| [[Less than]] || <code>Z = X @100 Y</code> || < | | [[Less than]] || <code>Z = X @100 Y</code> || <syntaxhighlight lang=apl inline>Z ← X < Y</syntaxhighlight> | ||
|- | |- | ||
| [[Not equal]] || <code>Z = X @101 Y</code> || < | | [[Not equal]] || <code>Z = X @101 Y</code> || <syntaxhighlight lang=apl inline>Z ← X ≠ Y</syntaxhighlight> | ||
|- | |- | ||
| [[Less than or equal]] || <code>Z = X @110 Y</code> || < | | [[Less than or equal]] || <code>Z = X @110 Y</code> || <syntaxhighlight lang=apl inline>Z ← X ≤ Y</syntaxhighlight> | ||
|- | |- | ||
| [[Constant]] One || <code>Z = X @111 Y</code> || < | | [[Constant]] One || <code>Z = X @111 Y</code> || <syntaxhighlight lang=apl inline>Z ← X(===)Y</syntaxhighlight> | ||
|- | |- | ||
| "Ceiling" ([[Maximum]]) || <code>Z = X @C Y</code> || < | | "Ceiling" ([[Maximum]]) || <code>Z = X @C Y</code> || <syntaxhighlight lang=apl inline>Z ← X ⌈ Y</syntaxhighlight> | ||
|- | |- | ||
| "Floor" ([[Minimum]]) || <code>Z = X @F Y</code> || < | | "Floor" ([[Minimum]]) || <code>Z = X @F Y</code> || <syntaxhighlight lang=apl inline>Z ← X ⌊ Y</syntaxhighlight> | ||
|- | |- | ||
| [[Exponential]] || <code>Z = X @E Y</code> || < | | [[Exponential]] || <code>Z = X @E Y</code> || <syntaxhighlight lang=apl inline>Z ← X * Y</syntaxhighlight> | ||
|- | |- | ||
| [[Assignment]] || <code>Z = X</code> || < | | [[Assignment]] || <code>Z = X</code> || <syntaxhighlight lang=apl inline>Z ← X</syntaxhighlight> | ||
|- | |- | ||
| [[Not]] || <code>Z = @N X</code> || < | | [[Not]] || <code>Z = @N X</code> || <syntaxhighlight lang=apl inline>Z ← ~ X</syntaxhighlight> | ||
|- | |- | ||
| [[Absolute value]] || <code>Z = @A X</code> || < | | [[Absolute value]] || <code>Z = @A X</code> || <syntaxhighlight lang=apl inline>Z ← | X</syntaxhighlight> | ||
|- | |- | ||
| [[Circular|Sine]] || <code>Z = @S X</code> || < | | [[Circular|Sine]] || <code>Z = @S X</code> || <syntaxhighlight lang=apl inline>Z ← 1 ○ X</syntaxhighlight> | ||
|- | |- | ||
| [[Circular|Cosine]] || <code>Z = @C X</code> || < | | [[Circular|Cosine]] || <code>Z = @C X</code> || <syntaxhighlight lang=apl inline>Z ← 2 ○ X</syntaxhighlight> | ||
|- | |- | ||
| [[Log]] (base 10) || <code>Z = @L X</code> || < | | [[Log]] (base 10) || <code>Z = @L X</code> || <syntaxhighlight lang=apl inline>Z ← 10 ⍟ X</syntaxhighlight> | ||
|- | |- | ||
| [[Round up]] || <code>Z = @U X</code> || < | | [[Round up]] || <code>Z = @U X</code> || <syntaxhighlight lang=apl inline>Z ← ⌈ X</syntaxhighlight> | ||
|- | |- | ||
| [[Round down]] || <code>Z = @D X</code> || < | | [[Round down]] || <code>Z = @D X</code> || <syntaxhighlight lang=apl inline>Z ← ⌊ X</syntaxhighlight> | ||
|- | |- | ||
| [[Matrix]] [[Transpose]] || <code>Z = @T X</code> || < | | [[Matrix]] [[Transpose]] || <code>Z = @T X</code> || <syntaxhighlight lang=apl inline>Z ← ⍉ X</syntaxhighlight> | ||
|- | |- | ||
| [[Reduction]]* || <code>Z = @U X</code> || < | | [[Reduction]]* || <code>Z = @U X</code> || <syntaxhighlight lang=apl inline>Z ← +/ X</syntaxhighlight> | ||
|- | |- | ||
| [[Base]] || <code>Z = X @B Y</code> || < | | [[Base]] || <code>Z = X @B Y</code> || <syntaxhighlight lang=apl inline>Z ← X ⊥ Y</syntaxhighlight> | ||
|- | |- | ||
| [[Residue]] || <code>Z = X @W Y</code> || < | | [[Residue]] || <code>Z = X @W Y</code> || <syntaxhighlight lang=apl inline>Z ← X | Y</syntaxhighlight> | ||
|- | |- | ||
| [[Compression]] || <code>Z = U / X</code> || < | | [[Compression]] || <code>Z = U / X</code> || <syntaxhighlight lang=apl inline>Z ← U / X</syntaxhighlight> | ||
|- | |- | ||
| Post <code>Z</code> with <code>X</code> controlled by <code>U</code> || <code>Z = U @P X</code> || | | Post <code>Z</code> with <code>X</code> controlled by <code>U</code> || <code>Z = U @P X</code> || | ||
|- | |- | ||
| [[Reshape|Dimension array]] || <code>@D X , C , R</code> || < | | [[Reshape|Dimension array]] || <code>@D X , C , R</code> || <syntaxhighlight lang=apl inline>X ← R C ⍴ X</syntaxhighlight> or <syntaxhighlight lang=apl inline>X ⍴⍨← R C</syntaxhighlight> | ||
|- | |- | ||
| [[Catenate|Juxtaposition]] || <code>Z = X , X</code> || < | | [[Catenate|Juxtaposition]] || <code>Z = X , X</code> || <syntaxhighlight lang=apl inline>Z ← X , X</syntaxhighlight> | ||
|- | |- | ||
| Left [[rotate]] || <code>Z = K @L X</code> || < | | Left [[rotate]] || <code>Z = K @L X</code> || <syntaxhighlight lang=apl inline>Z ← K ⌽ X</syntaxhighlight> | ||
|- | |- | ||
| Right [[rotate]] || <code>Z = K @R X</code> || < | | Right [[rotate]] || <code>Z = K @R X</code> || <syntaxhighlight lang=apl inline>Z ← (-K) ⌽ X</syntaxhighlight> | ||
|- | |- | ||
| Compare and [[branch]] || <code>X @C Y, A, B, C</code> || | | Compare and [[branch]] || <code>X @C Y, A, B, C</code> || | ||
Line 94: | Line 94: | ||
| Update <code>X</code>, compare and branch || <code>@U X , Y , A , B , C</code> || | | Update <code>X</code>, compare and branch || <code>@U X , Y , A , B , C</code> || | ||
|- | |- | ||
| [[Range|Interval]] || <code>Z = @I I , J</code> || < | | [[Range|Interval]] || <code>Z = @I I , J</code> || <syntaxhighlight lang=apl inline>Z ← I … J</syntaxhighlight> | ||
|- | |- | ||
| Mid-selection array || <code>Z = @M I , J</code> || | | Mid-selection array || <code>Z = @M I , J</code> || | ||
Line 100: | Line 100: | ||
| Get data (cards) || <code>@G X</code> || | | Get data (cards) || <code>@G X</code> || | ||
|- | |- | ||
| Type data || <code>@T X</code> || < | | Type data || <code>@T X</code> || <syntaxhighlight lang=apl inline>⎕ ← X</syntaxhighlight> | ||
|- | |- | ||
| Transform floating–alphanumeric || <code>Z = @X Y</code> || < | | Transform floating–alphanumeric || <code>Z = @X Y</code> || <syntaxhighlight lang=apl inline>Z ← ⎕UCS Y</syntaxhighlight> or <syntaxhighlight lang=apl inline>Z ← ⎕AF X</syntaxhighlight> | ||
|- | |- | ||
| Accept data from typewriter || <code>@A X</code> || < | | Accept data from typewriter || <code>@A X</code> || <syntaxhighlight lang=apl inline>X ← ⍞</syntaxhighlight> | ||
|- | |- | ||
| Type heading message and proceed || <code>@H any heading</code> || | | Type heading message and proceed || <code>@H any heading</code> || | ||
Line 115: | Line 115: | ||
== References == | == References == | ||
<references/> | <references/> | ||
{{APL dialects}}[[Category: | {{APL dialects}}[[Category:Flat array languages]][[Category:IBM APL dialects]] |