Tests¶
Comparison¶
Do ranges of x and y match?¶
q)x:1 2 3
q)y:3 1 2 1
q)(~)over('[asc;distinct])each(x;y)
1b
q)y:3 1 2 1 4
q)(~)over('[asc;distinct])each(x;y)
0b
Quick membership for non-negative integers¶
q)x:5 3 7 2
q)y:8 5 2 6 1 9
q)max x,y
9
q)(1+max x,y)#0
0 0 0 0 0 0 0 0 0 0
q)a:(1+max x,y)#0
q)a
0 0 0 0 0 0 0 0 0 0
q)@[a;y;:;1]
0 1 1 0 0 1 1 0 1 1
q)(@[a;y;:;1])[x]
1 0 0 1
q)@[(1+max x,y)#0;y;:;1][x]
1 0 0 1
Instructive to study, but not actually faster than x in y
(V3.6).
Do x and y have items in common?¶
q)x:"abc"
q)y:"cdeac"
q)any x in y
1b
Is x a subset of y?¶
q)x:"abgk"
q)y:"abcdefghijkl"
q)all x in y
1b
Does x match y?¶
q)x:("abc";`sy;1 3 -7)
q)y:("abc";`sy;1 3 -7)
q)x~y
1b
q)x:1 2 3
q)y:1 4 3
q)x~y
0b
Do x and y match?¶
q)show q:10?2
0 0 0 1 0 1 0 1 0 1
q)x:enlist each q
q)y:x,\:()
q)x~y
1b
Pairwise match¶
q)x:("123";"123";"45";"45")
q)x
"123"
"123"
"45"
"45"
q)~':[x]
0101b
q)~':[x],0b
01010b
q)(~':[x]),0b
01010b
q)pm:{1 _ (~':[x]),0b}
q)pm 1 1 1 1 2 2 3 4 4 4
1110100110b
q)1 rotate(~)prior x
1010b
q)1 rotate(~)prior 1 1 1 1 2 2 3 4 4 4
1110100110b
Are x and y permutations of each other?¶
q)x:15 16 13 18 14 11 12
q)y:15 16 13 19 14 11 12
q)(asc x)~asc y
0b
q)y:15 16 13 14 18 12 11
q)(asc x)~asc y
1b
Matrixes¶
Is matrix x symmetric?¶
q)show x:(0 4 7 1; 4 8 6 4; 7 6 2 0; 1 4 0 6)
0 4 7 1
4 8 6 4
7 6 2 0
1 4 0 6
q)x~flip x
1b
q)show x:4 4#16?10
6 6 3 3
9 7 9 4
4 7 9 9
4 7 8 9
q)x~flip x
0b
Is matrix x antisymmetric?¶
q)show x:(0 -7 1; 7 0 -4; -1 4 0)
0 -7 1
7 0 -4
-1 4 0
q)x~neg flip x
1b
Is x upper triangular?¶
See 195, 196.
q)zm:{(2#count x)#0} / zero matrix (square matrix)
q)show x:(1 0 0 1;0 2 1 0;0 0 1 2;0 0 0 0)
1 0 0 1
0 2 1 0
0 0 1 2
0 0 0 0
q)tc:('[til;count])
q){x>\:x}tc x
0000b
1000b
1100b
1110b
q)x*{x>\:x}tc x
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
q)zm x
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
q)zm[x]~x*{x>\:x}tc x
1b
q){zm[x]~x*{x>\:x}tc x}flip x
0b
Is x lower triangular?¶
See 195, 196.
)show x:(1 0 0 0;0 2 0 0;0 1 1 0;1 0 2 0)
1 0 0 0
0 2 0 0
0 1 1 0
1 0 2 0
q){x<\:x}tc x
0111b
0011b
0001b
0000b
q)zm[x]~x*{x<\:x}tc x
1b
q){zm[x]~x*{x<\:x}tc x}flip x
0b
Is y a row of x?¶
q)show x:("aaa";"bbb";"ooo";"ppp";"kkk")
q)y:"ooo"
q)y in x
1b
DROP: keyword not idiom
Numbers¶
Are items integral?¶
q)ii:{x=floor x}
q)x:67 -120 3.83 -5.5
q)ii x
1100b
Are items even?¶
q)x:1 2 3 4 5
q)not x mod 2
01010b
Range¶
Is range of x 1?¶
Are all items of x the same?
q)x:1 1 1 1 1
q)1=count distinct x
1b
q)y:1 1 0 1 1
q)1=count distinct y
0b
Are items 1s and 0s only?¶
q)ib:{t:abs type x; $[t~1;1b;t in 5 6 7 9h;all x in t$0 1;0b]}
q)ib each (101b;1 0 1h;1 0 1i;1 0 1j;1 0 1 2;1 0 1f)
011101b
q)ib each (101b;1 0 1h;1 0 1i;1 0 1j;1 0 1 2;1 0 1f;1 1.2 0)
0111010b
Are items in interval [y)¶
q)x:19 20 21 39 40 41
q)y:20 40
q)x<\:y
11b
01b
01b
01b
00b
00b
q)01b~/:x<\:y
011100b
q)((<)over)each x<\:y
011100b
q)(</')x<\:y / elide keywords when composing iterators
011100b
Are items integers in interval [g,h)?¶
q)g:6;h:12
q)x:3 5 6 7.5 11 12 13
q)x<\:g,h
11b
11b
01b
01b
01b
00b
00b
q)(</)each x<\:g,h
0011100b
q)x where(</)each x<\:g,h
6 7.5 11
q)(x=floor x)&(</)each x<\:g,h
1110111b
Are items in interval [ y )?¶
q)x:9
q)show y:(1 9;9 16;5 7;10 20;6 10)
1 9
9 16
5 7
10 20
6 10
q)x<y
00b
01b
00b
11b
01b
q)(</)each x<y
01001b
Are items in interval ( y ]?¶
q)show y:(1 9;9 16;5 7;10 20;6 10)
1 9
9 16
5 7
10 20
6 10
q)x<=y
01b
11b
00b
11b
01b
q)(</)each x<=y
10001b
Are items in interval ( y[0],y[1] )?¶
q)2 3 5 8 9<\:y+0 1
11b
01b
01b
01b
00b
q)(</')2 3 5 8 9<\:y+0 1
01110b
q)2 3 5 8 9{(<)over x<y+0 1}\:y
01110b
Are items in interval [ y[0],y[1] ]?¶
q)(</')2 3 5 8 9<\:y+ 1 0
00100b
q)2 3 5 8 9{(<)over x<y+1 0}y
00100b
Sequence¶
Are items in ascending order?¶
q)all(>=)prior 0 1 1 1 7 8 9
1b
q)all(>=)prior 2 5 7 9 6 8 3
0b
Or.
q)x~asc x:2 5 7 9 6 8 3
0b
q)x~asc x:0 1 1 1 7 8 9
1b
Are items unique?¶
q)x:"abcdefg"
q)x~distinct x
1b
q)x:"abcdefa"
q)x~distinct x
0b
Does item differ from previous one?¶
q)differ x
11010011111b
Does item differ from next one?¶
q)x:"ceefffmeksc"
q)1_ differ x
1010011111b
Is x a permutation?¶
q)x:4 0 2 1 5 3 6
q)x~rank x
1b
q)x:4 3 3 6 0 5 4
q)x~rank x
0b
Shape¶
Is count of atoms 1?¶
See 366.
q)cs:{count raze over x}
q)co:{1=cs[x]}
q)co[35]
1b
q)co[enlist 35]
1b
q)co[1 1#35]
1b
q)co[1 2]
0b
q)co[til 0]
0b
Is x a vector?¶
q)iv:{0<type x}
q)iv each (0;1 2;"abc";2 3#til 6)
0110b
q)iv (0;1 2;"abc";2 3#til 6) / mixed list, not vector
0b
Is x empty?¶
q)ie:{0=count raze over x}
q)ie each(0;0#0;enlist 0#0;"";first til[3]#'"x")
01111b