Comparison¶
< Less Than > Greater Than deltas differences <= Up To >= At Least differ flag changes & Lesser | Greater min least, minimum max greatest, maximum mins running minimums maxs running maximums mmin moving minimums mmax moving maximums
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
< > = >= <= <>
are multithreaded primitives.
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