For characters x>.y (or any dyad) has only *:256 possibilities.
Therefore, one solution is to construct a table of size 65536:
MAXC=: , a.{~>./~i.256
MAXA=: ,/ ,"0/~ a.
maxc=: MAXC {~ MAXA i. ,.
GTE =: a. {~ >. & (a. i. ])
char1 =: a. {~ [EMAIL PROTECTED]
char2 =: a. {~ [EMAIL PROTECTED]
char1 (GTE -: maxc) char2
1
ts=: 6!:2 , 7!:[EMAIL PROTECTED]
ts 'char1 GTE char2'
0.0488294 1.25841e7
ts 'char1 maxc char2'
0.0753319 6.8169e6
----- Original Message -----
From: david alis <[EMAIL PROTECTED]>
Date: Sunday, April 6, 2008 1:41
Subject: [Jprogramming] relational operators and character data
To: Programming forum <[email protected]>
> Given X and Y with values taken from the set 'A', 'B', 'C', 'D'.
> I need to compute the larger of the two values (larger
> with respect
> to their position in ascii or ebcdic).
> In other words X >. Y
> However >. doesnt work with characters.
> Thus I use an expression similar to:
> a.{~>. & (a.i.])
>
> In 64 bit J this expression needs around 25M for a character
> vector of
> length 1e6:
>
> GTE =: a. {~ >. & (a. i. ])
> char1 =: a. {~ num1 =: [EMAIL PROTECTED]
> char2 =: a. {~ num2 =: [EMAIL PROTECTED]
>
> 7!:5<'num1'
> 8388608
> 7!:5<'char1'
> 1048576
>
> 7!:2 'char2 GTE char1'
> 25167872
> 7!:2 'num2 >. num1'
> 8390272
>
> Is there an alternative, or is there a form of the expression that
> would use special code?
> Perhaps there is an argument to !. such that when applied to >. would
> extend its domain? (Something like >.!.<a.)
>
> David
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm