Frame agreement: Difference between revisions

Jump to navigation Jump to search
70 bytes added ,  14:23, 26 August 2023
m
m (→‎Empty frame agreement: align comments)
 
(7 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≡⍵:'RANK ERROR: one frame must be a prefix of the other' ⎕SIGNAL 4 ⋄ ⍵}
           assert←{0≡⍵:'error: no common frame prefix' ⎕SIGNAL 4 ⋄ ⍵}
           r←(1↓⌽3⍴⌽⍵⍵)⌊≢∘⍴¨⍺⍵          ⍝ dyadic ranks
           r←1↓⌽3⍴⌽⍵⍵ ⋄ ar←≢¨p←⍴¨⍺⍵      ⍝ dyadic ranks, array ranks, shapes
           lf rf←(-r)↓∘⍴¨⍺⍵              ⍝ frames
          c←r{⍺>0:⍺⌊⍵ ⋄ 0⌈⍺+⍵}¨ar      ⍝ cell ranks
           cf←lf{⍺<⍥≢⍵:⍺ ⋄ ⍵}rf          common frame, assuming frames agree
           fl fr←(-c)↓¨p                left and right frames                      
           k←{⍬≡⍵:99 ⋄ -≢⍵}cf            ⍝ relative rank
           s←fl{⍺<⍥≢⍵:⍺ ⋄ ⍵}fr          shorter frame
           assert ⍺∧⍥(cf≡(≢cf)↑⍴)⍵:     verify that frames agree
           k←{⍬≡⍵:99 ⋄ -≢⍵}s            ⍝ relative rank
           ⍺ ⍺⍺⍤⍵⍵⍤k⊢⍵
           assert ⍺∧⍥(s≡(≢s)↑⍴)⍵:       do frames agree?
           ⍺ ⍺⍺⍤c⍤k⊢⍵
       }
       }
       x+_FA_ 0 1⊢y
       x+_FA_ 0 1⊢y
Line 148: Line 148:
</syntaxhighlight>
</syntaxhighlight>
{{Works in|[[Dyalog APL]]}}
{{Works in|[[Dyalog APL]]}}
[[Category:Leading axis theory]][[Category:Function characteristics]][[Category:Conformability]]{{APL features}}
[[Category:Leading axis theory]][[Category:Function characteristics]][[Category:Conformability]]{{APL features}}
trusted
83

edits

Navigation menu