Arithmetic operators

Arithmetic operators

Numeric filters can be added, multiplied, and compared using standard arithmetic operators:
      gamenumber * movenumber + ply == 24
The following are the allowed arithmetic operations on numeric filters:
-unary minus
/integer division
In addition, the following functions are available for standard arithmetic computations: abs, max, min, sqrt.

matching the position

each such comparison or arithmetic operator is its own filter. For example, the CQL expression
      power A + power a
is a + filter whose two arguments are power A and power a. which can either match or not match the current position. Each such binary operator only matches the position if each of its two arguments also matches the position. (In addition, / and % will not match when their right hand arguments are zero).

For example, the following expression is equal to the number of white pieces in the previous position:


If the current position is the initial position, then the filter does not match. Thus,

	0<1 + parent:#A

will match only if the current position is not the initial position.


Arithmetic operators are used throughout the CQL examples. They are used extensively in averagedistance.cql, where we see computations like:
sqrt(drank*drank + dfile*dfile)

This computes the square root (as an integer) of the sum of the squares of drank and dfile, which is used to compute the distance between two squares.