Contents
Implementation of Certain J Primitives
Some of J primitives are not exactly primitive. Some of them contain bugs, shortcomings and concious trade-offs. Some are not implemented for all arguments.
This page contains definitions, reference implementations or suggested behavior for currenly unimplemented domains for such "primitives".
%: Dyadic, extended
See Essays/IntRoot
A. Dyadic
According to R.Hui:
type =: 3!:0
boxed =: 32&=@type
pind =: ]`]`+@.(*@])"0
pfill =: [ ((i.@[-.]) , ]) pind
ord =: >:@(>./)
base =: >:@i.@-@#
rfd =: +/@({.>}.)\.
dfr =: /:^:2@,/
adot1 =: (base #. rfd)@((ord pfill ])`C.@.boxed) " 1
adot2 =: dfr@(base@] #: [) { ]See also
? Monadic, Extended
As of J601βn ? applied to on large right arguments yields domain error.
?2^31 |domain error | ?2^31 ?_1+2^31 2094548590
The workaround is to use the following verb, which generates a uniformaly distributed random number in the range 0.._1+y. for arbitrary large y. (under assumption that the result of underlying primitive ? is itself uniformly distributed).
dice=: 9999&$: : (4 : 0)"0
y=. x #.^:_1 y-1
label_again.
l=.y =&{. r=.?1+{.y
while. l *. r<&#y do.
if. d>f=.y{~_1+#r=.r,d=.?x do. goto_again. end.
l=.d=f
end.
x #. r,?x#~y-&#r
)Optional left argument specifies chunk size and can be selected to tweak performance.
It turns out that optimum for large numbers is achieved with 9999 as left argument, which is quite surprising. -- AndrewNikitin 2006-06-17 04:03:09
Comparisons of non-numeric atoms
J signals domain error if you try to compare character or boxed data with < etc. At the same time /: primitive is somehow capable of comparing nonnumerics in order to grade them. The following adverb unearthes this algorithm.
ue=:1 : ('u';':';'x u&((/:~x,y)&i.) y') ("0)
'a' <ue 'b'
1
'b' <ue 'b'
0
(<'aardvark') >:ue <'aachen'
1Roger once gave the reason that /: \: can sort any data, but < <: = ~: >: > can only compare numerics. If you need to compare non-numeric atoms (or items), you may find useful these generalized replacements for the comparison dyads.
Contributed by AndrewNikitin
