The # filter has one argument, a set filter or a string filter . The # filter always matches a position when its argument does.

Set filter as argument

If its argument is a set filter, then the value of the #-filter is the number of squares in its argument. The number of squares of a set is also called the cardinality of that set. The number of squares in the empty set is 0. Suppose for example that the current position is the start position of a chess game. Then

  #K  1
  #[Kk]  2
  #P attackedby K  3

To find a position where there are multiple white queens, you could use:


In this case, however, you could just use


because a set filter that is compared to a number is automatically converted to its cardinality (that is, the set filter is prefaced by #).

String filter as argument

(New in CQL 6.1) If its argument is a string filter, then the value of the #-filter is the number of characters in the string denoted by that argument.

  #"Capablanca"  10
  #""  0

Dictionary as argument

If D is a dictionary, then #D number of entries in D (see here for more information).
  dictionary Dict


The # filter is used in chameleon.cql, parallelpaths.cql, and queenpawnpinecho.cql.

In chameleon.cql, the line

checks that the number of pieces in the current positions is the same as the number of pieces in the position named by the variable source, using the : filter.