Frame agreement: Difference between revisions

Jump to navigation Jump to search
171 bytes added ,  17:46, 17 July 2023
→‎Model: fix rank / frame asymmetries
m (→‎Empty frame agreement: align comments)
(→‎Model: fix rank / frame asymmetries)
Line 130: Line 130:
<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≡⍵:'no common frame prefix' ⎕SIGNAL 4 ⋄ ⍵}
           r←(1↓⌽3⍴⌽⍵⍵)⌊≢∘⍴¨⍺⍵          ⍝ dyadic ranks
           r←1↓⌽3⍴⌽⍵⍵ ⋄ pp←≢¨p←⍴¨⍺⍵              ⍝ dyadic ranks, array ranks
           lf rf←(-r)↓∘⍴¨⍺⍵              ⍝ frames
           c←r{⍺≥0:⍺⌊⍵ ⋄ ⍵≤∣⍺:0⌈⍺+⍵ ⋄ ⍺+⍵}¨pp    ⍝ cell ranks
           cf←lf{⍺<⍥≢⍵:⍺ ⋄ ⍵}rf          common frame, assuming frames agree
          fl fr←(-c)↓¨p                          ⍝ 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
      ⎕IO←0
      x←⍳2
      y←2 3 2⍴⍳12
      x+_FA_ 0 1⊢y
  0  1
  0  1
  2  3
  2  3
trusted
83

edits

Navigation menu