Frame agreement: Difference between revisions

Jump to navigation Jump to search
18 bytes removed ,  12:08, 26 August 2023
m
→‎Model: replace obscure variable names; remove extra whitespace
m (→‎Model: replace with a more symmetric computation of cell ranks; no need for tables)
m (→‎Model: replace obscure variable names; remove extra whitespace)
Line 130: Line 130:
<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
           dr←1↓⌽3⍴⌽⍵⍵ ar←≢¨sh←⍴¨⍺⍵    ⍝ dyadic ranks, array ranks, shapes
           c←r{⍺>0:⍺⌊⍵ ⋄ 0⌈⍺+⍵}¨pp                ⍝ cell ranks
           cr←dr{⍺>0:⍺⌊⍵ ⋄ 0⌈⍺+⍵}¨ar      ⍝ cell ranks
           fl fr←(-c)↓¨p                          ⍝ frames                       
           fl fr←(-cr)↓¨sh                left and right frames                       
           s←fl{⍺<⍥≢⍵:⍺ ⋄ ⍵}fr                   ⍝ shorter frame
           fs←fl{⍺<⍥≢⍵:⍺ ⋄ ⍵}fr           ⍝ shorter frame
           k←{⍬≡⍵:99 ⋄ -≢⍵}s                      ⍝ relative rank
           k←{⍬≡⍵:99 ⋄ -≢⍵}fs            ⍝ relative rank
           assert ⍺∧⍥(s≡(≢s)↑⍴)⍵:                 ⍝ do frames agree?
           assert ⍺∧⍥(fs≡(≢fs)↑⍴)⍵:       ⍝ do frames agree?
           ⍺ ⍺⍺⍤c⍤k⊢⍵
           ⍺ ⍺⍺⍤c⍤k⊢⍵
       }
       }
trusted
83

edits

Navigation menu