|
|
(5 intermediate revisions by the same user not shown) |
Line 125: |
Line 125: |
|
| |
|
| === Model === | | === Model === |
|
| |
| In dialects that do not feature frame prefix agreement, it can nevertheless be utilised by the introduction of an explicit operator: | | In dialects that do not feature frame prefix agreement, it can nevertheless be utilised by the introduction of an explicit operator: |
|
| |
|
| <syntaxhighlight lang=apl> | | <syntaxhighlight lang=apl> |
| _FA_←{ | | _FA_←{ |
| assert←{0≡⍵:'no common frame prefix' ⎕SIGNAL 4 ⋄ ⍵} | | assert←{0≡⍵:'error: no common frame prefix' ⎕SIGNAL 4 ⋄ ⍵} |
| r←1↓⌽3⍴⌽⍵⍵ ⋄ pp←≢¨p←⍴¨⍺⍵ ⍝ dyadic ranks, array ranks | | r←1↓⌽3⍴⌽⍵⍵ ⋄ ar←≢¨p←⍴¨⍺⍵ ⍝ dyadic ranks, array ranks, shapes |
| c←r{⍺≥0:⍺⌊⍵ ⋄ ⍵≤∣⍺:0⌈⍺+⍵ ⋄ ⍺+⍵}¨pp ⍝ cell ranks | | c←r{⍺>0:⍺⌊⍵ ⋄ 0⌈⍺+⍵}¨ar ⍝ cell ranks |
| fl fr←(-c)↓¨p ⍝ frames | | fl fr←(-c)↓¨p ⍝ left and right frames |
| s←fl{⍺<⍥≢⍵:⍺ ⋄ ⍵}fr ⍝ shorter frame | | s←fl{⍺<⍥≢⍵:⍺ ⋄ ⍵}fr ⍝ shorter frame |
| k←{⍬≡⍵:99 ⋄ -≢⍵}s ⍝ relative rank | | k←{⍬≡⍵:99 ⋄ -≢⍵}s ⍝ relative rank |
| assert ⍺∧⍥(s≡(≢s)↑⍴)⍵: ⍝ do frames agree? | | assert ⍺∧⍥(s≡(≢s)↑⍴)⍵: ⍝ do frames agree? |
| ⍺ ⍺⍺⍤c⍤k⊢⍵ | | ⍺ ⍺⍺⍤c⍤k⊢⍵ |
| } | | } |
| ⎕IO←0
| |
| x←⍳2
| |
| y←2 3 2⍴⍳12
| |
| x+_FA_ 0 1⊢y | | x+_FA_ 0 1⊢y |
| 0 1 | | 0 1 |
Line 152: |
Line 148: |
| </syntaxhighlight> | | </syntaxhighlight> |
| {{Works in|[[Dyalog APL]]}} | | {{Works in|[[Dyalog APL]]}} |
|
| |
| The <syntaxhighlight lang=apl inline>c←r{⍺≥0:⍺⌊⍵ ⋄ ⍵≤∣⍺:0⌈⍺+⍵ ⋄ ⍺+⍵}¨pp ⍝ cell ranks</syntaxhighlight> line of <syntaxhighlight lang=apl inline>_FA_</syntaxhighlight> addresses various asymmetries in computing cell rank. The table below shows the cell ranks corresponding to pairs of operand and argument ranks.
| |
| {|class=wikitable
| |
| ! operand rank !! argument rank !! cell rank
| |
| |-
| |
| | <syntaxhighlight lang=apl inline>¯5</syntaxhighlight> || <syntaxhighlight lang=apl inline>3</syntaxhighlight> || <syntaxhighlight lang=apl inline>0</syntaxhighlight>
| |
| |-
| |
| | <syntaxhighlight lang=apl inline>¯3</syntaxhighlight> || <syntaxhighlight lang=apl inline>5</syntaxhighlight> || <syntaxhighlight lang=apl inline>2</syntaxhighlight>
| |
| |-
| |
| | <syntaxhighlight lang=apl inline>¯3</syntaxhighlight> || <syntaxhighlight lang=apl inline>3</syntaxhighlight> || <syntaxhighlight lang=apl inline>0</syntaxhighlight>
| |
| |-
| |
| | <syntaxhighlight lang=apl inline>3</syntaxhighlight> || <syntaxhighlight lang=apl inline>5</syntaxhighlight> || <syntaxhighlight lang=apl inline>3</syntaxhighlight>
| |
| |-
| |
| | <syntaxhighlight lang=apl inline>5</syntaxhighlight> || <syntaxhighlight lang=apl inline>3</syntaxhighlight> || <syntaxhighlight lang=apl inline>3</syntaxhighlight>
| |
| |-
| |
| | <syntaxhighlight lang=apl inline>3</syntaxhighlight> || <syntaxhighlight lang=apl inline>3</syntaxhighlight> || <syntaxhighlight lang=apl inline>3</syntaxhighlight>
| |
| |}
| |
|
| |
| The next table demonstrates the relations (in tacit code) among the operand ranks and corresponding argument ranks, given what the cell rank should be.
| |
| {|class=wikitable
| |
| ! operand rank (o) !! relation between o and a !! argument rank (a) !! resultant cell rank
| |
| |-
| |
| | <syntaxhighlight lang=apl inline>¯5</syntaxhighlight> || <syntaxhighlight lang=apl inline>0⌈+</syntaxhighlight> || <syntaxhighlight lang=apl inline>3</syntaxhighlight> || <syntaxhighlight lang=apl inline>0</syntaxhighlight>
| |
| |-
| |
| | <syntaxhighlight lang=apl inline>¯3</syntaxhighlight> || <syntaxhighlight lang=apl inline>+</syntaxhighlight> || <syntaxhighlight lang=apl inline>5</syntaxhighlight> || <syntaxhighlight lang=apl inline>2</syntaxhighlight>
| |
| |-
| |
| | <syntaxhighlight lang=apl inline>¯3</syntaxhighlight> || <syntaxhighlight lang=apl inline>+</syntaxhighlight> || <syntaxhighlight lang=apl inline>3</syntaxhighlight> || <syntaxhighlight lang=apl inline>0</syntaxhighlight>
| |
| |-
| |
| | <syntaxhighlight lang=apl inline>3</syntaxhighlight> || <syntaxhighlight lang=apl inline>⌊</syntaxhighlight> || <syntaxhighlight lang=apl inline>5</syntaxhighlight> || <syntaxhighlight lang=apl inline>3</syntaxhighlight>
| |
| |-
| |
| | <syntaxhighlight lang=apl inline>5</syntaxhighlight> || <syntaxhighlight lang=apl inline>⌊</syntaxhighlight> || <syntaxhighlight lang=apl inline>3</syntaxhighlight> || <syntaxhighlight lang=apl inline>3</syntaxhighlight>
| |
| |-
| |
| | <syntaxhighlight lang=apl inline>3</syntaxhighlight> || <syntaxhighlight lang=apl inline>⌊</syntaxhighlight> || <syntaxhighlight lang=apl inline>3</syntaxhighlight> || <syntaxhighlight lang=apl inline>3</syntaxhighlight>
| |
| |-
| |
| |}
| |
|
| |
|
| |
| [[Category:Leading axis theory]][[Category:Function characteristics]][[Category:Conformability]]{{APL features}} | | [[Category:Leading axis theory]][[Category:Function characteristics]][[Category:Conformability]]{{APL features}} |