bags←{ ⍝ Multisets / bags. pd_←{ ⍝ "progressive dyadic ..." (Bob Smith). r←(⍴⍵)⍴⍋⍋(⍺,⍬)⍳⍵,⍺ l←(⍴⍺)⍴⍋⍋(⍺,⍬)⍳⍺,⍵ l ⍺⍺ r } pde←∊pd_ ⍝ progressive dyadic epsilon. pdi←⍳pd_ ⍝ progressive dyadic iota. mad←{(~⍺ pde ⍵)/⍺} ⍝ multiset asymmetric difference. aa←⍺⍺ ⋄ fn←⍬⍴⎕CR'aa' ⍝ '~', '∪', etc. 0::⎕SIGNAL ⎕EN ⍝ signal any error to caller. 0=⎕NC'⍺':{ ⍝ monadic call. '∪'≡fn:⍵,⍬ ⍝ unique (noop for vector). ⎕SIGNAL 16 ⍝ unexpected operand: nonce error. }⍵ '≡'≡fn:((⍴⍺)≡⍴⍵)>0∊⍺ pde ⍵ ⍝ match. '≢'≡fn:((⍴⍺)≡⍴⍵)≤0∊⍺ pde ⍵ ⍝ natch. '~'≡fn:⍺ mad ⍵ ⍝ without. ⍺~⍵ '∪'≡fn:⍺,⍵ mad ⍺ ⍝ union. ⍺,⍵~⍺ '∩'≡fn:((⍺ pde ⍵)/⍺) ⍝ intersection. '∊'≡fn:⍺ pde ⍵ ⍝ progressive membership. '⍳'≡fn:⍺ pdi ⍵ ⍝ progressive dyadic iota. 3=⎕NC'⍺⍺':⎕SIGNAL 16 ⍝ unexpected operand: nonce error. '§'≡⍺⍺:(⍺ mad ⍵),⍵ mad ⍺ ⍝ multiset symmetric difference (msd). ⎕SIGNAL 16 ⍝ unexpected operand: nonce error. } code_colours test script Back to: notes Back to: Workspaces