I was reading about the Dyalog "key" operator ⌸. It's certainly a useful function, and something that should probably be added to GNU APL, in my opinion.
As always when thinking about useful additions to GNU APL, I wanted to try to do some things that ⌸ can do, without having access to it. So, I wanted to simply take a string of characters, and create a list of each character and the number of occurrences of each character in that string. My solution works, but feels clumsy: * { ⊃{(↑⍵) (↑⍴⍵)}¨(⎕UCS v) ⊂ v←⍵[⍋⍵] } "abcfoobat"* ┏→━━━━┓ ↓'a' 2┃ ┃'b' 2┃ ┃'c' 1┃ ┃'f' 1┃ ┃'o' 2┃ ┃'t' 1┃ ┗━━━━━┛ Can anyone improve this? In particular, can it be improved to the point of convincing me that ⌸ is not needed? Regards, Elias