|
⎕ct ← 0
invert ← {↑¨ ⊂⍤¯1 ⍉ ⍵}
assert ← {⍺←'assertion failure' ⋄ 0∊⍵:⍺ ⎕signal 8 ⋄ shy←0}
tassert ← {
assert (1≤≢⍵)∧1=⍴⍴⍵ : ⍝ non-empty vector
assert (⊃=⊢)≢¨⍵ : ⍝ equal tally in each item
assert 2=≡⍵ : ⍝ nested array with simple items
1
}
tindex ← {(⊂⊂⍺)⌷¨⍵}
tix1 ← {(⍉↑⍺⍳¨⍺)⍳(⍉↑⍺⍳¨⍵)}
tix ← 8⌶
teps ← {(≢⊃⍵) > ⍵ tix ⍺}
twithout ← {⍺ ⌿¨⍨ ⊂~⍺ teps ⍵}
tunique ← {⍵ ⌿¨⍨ ⊂(⍳≢⊃⍵)=tix⍨ ⍵}
tkey ← {(⊂tix⍨⍺) ⍺⍺⌸¨ ⍵}
tgr ← {⊃ {⍵[⍋(⊂⍵)⌷⍺]}/ ⍵,⊂⍳≢⊃⍵}
tgr1 ← {⍋ ⍉ ↑ {(⍋⍋⍵)[⍳⍨⍵]}¨ ⍵}
torder ← {0=⎕nc '⍺':tgr ⍵ ⋄ (tgr ⍵)tindex ⍺}
|