Skip to content

Comparison

Six comparison operators

Syntax: (e.g.) x = y, =[x;y]

These binary operators work intuitively on numerical values (converting types when necessary), and apply also to lists, dicts, and tables. They are atomic.

Returns 1b where x and y are equal, else 0b.

q)"hello" = "world"
00010b
q)5h>4h
1b
q)0x05<4
0b
q)0>(1i;-2;0h;1b;0N;-0W)
010011b
q)5>=(`a`b!4 6)
a| 1
b| 0

Unlike Match, they are not strict about type.

q)1~1h
0b
q)1=1h
1b

Comparison tolerance applies when matching floats.

q)(1 + 1e-13) = 1
1b

For booleans, <> is the same as exclusive or (XOR).

Temporal values

Particularly notice the comparison of ordinal with cardinal datatypes, such as timestamps with minutes.

q)times: 09:15:37 09:29:01 09:29:15 09:29:15 09:30:01 09:35:27
q)spans:`timespan$times  / timespans:  cardinal
q)stamps:.z.D+times      / timestamps: ordinal 
q)t:09:29                / minute:     cardinal

When comparing ordinals with cardinals, ordinal is converted to the cardinal type first: stamps=t is equivalent to (`minute$stamps)=t and thus

q)(stamps<t;stamps=t;stamps>t)
100000b
011100b
000011b
q)(spans<t;spans=t;spans>t)
100000b
000000b
011111b

Comparing temporals
Q for Mortals §4.9.1 Temporal Comparison

Different types

The comparison operators also work on text values (characters, symbols) – not always intuitively.

q)"0" < ("4"; "f"; "F"; 4)  / characters are treated as their numeric value
1110b
q)"alpha" > "omega"         / strings are char lists
00110b
q)`alpha > `omega           / but symbols compare atomically
0b

When comparing two values of different types, the general rule (apart from those for temporal types above) is that the underlying values are compared.

Nulls

Nulls of any type are equal.

q)n:(0Nh;0Ni;0N;0Ne;0n) / nulls
q)n =/:\: n
11111b
11111b
11111b
11111b
11111b

Any value exceeds a null.

q)inf: (0Wh;0Wi;0W;0We;0w)  / numeric infinities
q)n < neg inf
11111b

Infinities

Infinities of different type are ordered by their width. In ascending order:

negative: -float < -real < -long < -int < -short
positive:  short <  int  <  long < real < float 
q)inf: (0Wh;0Wi;0W;0We;0w)    / numeric infinities in ascending type width
q)(>=) prior inf              / from short to float
11111b
q)(>=) prior reverse neg inf  / from -float to -short
11111b

This follows the rule above for comparing values of different types.

deltas

Keyword deltas is a uniform unary function that returns the differences between items in its numeric list argument.

differ

Keyword differ is a uniform unary function that returns a boolean list indicating where consecutive pairs of items in x differ.

Match

Match (~) compares its arguments and returns a boolean atom to say whether they are the same.

Comparison tolerance
Q for Mortals §4.3.3 Order