Charmap


p {~ q i. ]
Improved
initial writing: 2006-11-07
last updated: 2007-11-29


The monad p {~ q i. ] where p and q
are lists of 1-byte characters performs character mappings. For example:

   'AA aa'=: a.{~ 65 97 +/ i.26
   AA
ABCDEFGHIJKLMNOPQRSTUVWXYZ
   aa
abcdefghijklmnopqrstuvwxyz
   lc=: (aa,a.) {~ (AA,a.) i. ]
   lc 'United States of America, Union of South Africa'
united states of america, union of south africa

The phrase and its variants ( (q i.]){p"_
and q&i.{p"_ )
are now supported by special code and are faster and leaner.
The following benchmarks demonstrate the improvement:

x=: a. {~ 1e6 ?@$ 256
p=: a. {~ 123 (22 b.) i.256
ts=: 6!:2, 7!:2@]  NB. time and space
ts 'Expression'
Expression     J 6.02     J 6.01     Ratio
lc x   0.004747   1.04934e6   0.018244   9.43795e6   3.84   8.99
(p{~a.i.]) x   0.001450   1.04979e6   0.018401   9.43840e6   12.69   8.99