trusted
83
edits
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 ⋄ ⍵} | ||
dr←1↓⌽3⍴⌽⍵⍵ ⋄ ar←≢¨sh←⍴¨⍺⍵ ⍝ dyadic ranks, array ranks, shapes | |||
cr←dr{⍺>0:⍺⌊⍵ ⋄ 0⌈⍺+⍵}¨ar ⍝ cell ranks | |||
fl fr←(- | fl fr←(-cr)↓¨sh ⍝ left and right frames | ||
fs←fl{⍺<⍥≢⍵:⍺ ⋄ ⍵}fr ⍝ shorter frame | |||
k←{⍬≡⍵:99 ⋄ -≢⍵} | k←{⍬≡⍵:99 ⋄ -≢⍵}fs ⍝ relative rank | ||
assert ⍺∧⍥( | assert ⍺∧⍥(fs≡(≢fs)↑⍴)⍵: ⍝ do frames agree? | ||
⍺ ⍺⍺⍤c⍤k⊢⍵ | ⍺ ⍺⍺⍤c⍤k⊢⍵ | ||
} | } |