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

Reply via email to