Since this does force a conversion from u8 to u16, and since it's the
wrong conversion in some cases, it's probably best to define words as

words=: (0;sj;mj) ;: 2&u:

(If loss of unicode4 characters is a concern, an additional guard
which protects using an assertion would be good.)

Thanks,

-- 
Raul

On Fri, Dec 11, 2020 at 10:38 AM Don Guinn <[email protected]> wrote:
>
> Recently there was a discussion on recognizing APL characters from other
> characters for ";:". I had wanted to try using the boxed form for "mj"
> instead of the literal form in ";:". So I gave it a try. Attached is a
> script containing "sj" and "mj" which will recognize APL characters for U16
> and U32. It also extends ";:" to handle U16 and U32.
>
> Here a few examples:
>
> NB. Normal J Statement
>
> words 'sum=. (i.3 4)+/ .*0j4+pru 4'
>
> +---+--+-+--+---+-+-+-+-+-+---+-+---+-+
>
> |sum|=.|(|i.|3 4|)|+|/|.|*|0j4|+|pru|4|
>
> +---+--+-+--+---+-+-+-+-+-+---+-+---+-+
>
> NB. An equivalent APL statement
>
> words U16 'sum← (⍳3 4)+.×0j4+pru 4'
>
> +---+-+-+-+---+-+--+-+---+-+---+-+
>
> |sum|←|(|⍳|3 4|)|+.|×|0j4|+|pru|4|
>
> +---+-+-+-+---+-+--+-+---+-+---+-+
>
> NB. Support for unicode
>
> words '¿Qué tan difícil es aprender el lenguaje de programación J?'
>
> +----+---+-------+--+--------+--+--------+--+------------+-+-+
>
> |¿Qué|tan|difícil|es|aprender|el|lenguaje|de|programación|J|?|
>
> +----+---+-------+--+--------+--+--------+--+------------+-+-+
>
> NB. A mixture of types
>
> ,.<;.2 words U16 {{)n
>
> x u^:(v0`v1`v2)y NB. <==> (x v0 y)u^:(x v1 y) (x v2 y)
>
> (~R∊R∘.×R)/R←1↓ιR ⍝ Find all primes from 1 to R
>
> Hvað er með alla umlóta?
>
> The amount is £100
>
> 1 3 2j1+2 ¯3 2r7
>
> }}
>
> +-------------------------------------------------------------------+
>
> |+-+-+--+-+--+-+--+-+--+-+-+-------------------------------------+-+|
>
> ||x|u|^:|(|v0|`|v1|`|v2|)|y|NB. <==> (x v0 y)u^:(x v1 y) (x v2 y)| ||
>
> |+-+-+--+-+--+-+--+-+--+-+-+-------------------------------------+-+|
>
> +-------------------------------------------------------------------+
>
> |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-----------------------------+-+|
>
> ||(|~|R|∊|R|∘|.|×|R|)|/|R|←|1|↓|ι|R|⍝ Find all primes from 1 to R| ||
>
> |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-----------------------------+-+|
>
> +-------------------------------------------------------------------+
>
> |+----+--+---+----+------+-+-+ |
>
> ||Hvað|er|með|alla|umlóta|?| | |
>
> |+----+--+---+----+------+-+-+ |
>
> +-------------------------------------------------------------------+
>
> |+---+------+--+----+-+ |
>
> ||The|amount|is|£100| | |
>
> |+---+------+--+----+-+ |
>
> +-------------------------------------------------------------------+
>
> |+-------+-+----+---+-+ |
>
> ||1 3 2j1|+|2 ¯3|2r7| | |
>
> |+-------+-+----+---+-+ |
>
> +-------------------------------------------------------------------+
>
> NB. A speed test
>
> ts=:6!:2,7!:2@]
>
> y=: 1e6$' fourscore and seven years ago, our fathers'
>
> ts ';: y'
>
> 0.0211792 4.26892e7
>
> ts 'words y'
>
> 0.022107 2.8022e7
>
> (;:-:words)y
>
> 1
>
> I found the boxed form for "mj" quite workable. In addition it is able to
> handle a wider range of data types.
>
>
> As expected it is a little slower than the standard ";:" as it forces ";:"
> to convert "literal" to "literal2". But I was surprised to see the drastic
> reduction in memory required to run the modified version of ";:".
> ----------------------------------------------------------------------
> For information about J forums see http://www.jsoftware.com/forums.htm
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm

Reply via email to