makesquare
Themakesquare
filter creates a square from either a file and a rank or from a string:
makesquare (1 4) ≡ a4 makesquare "b3" ≡ b3
file and rank argument to makesquare
In the first form ofmakesquare
,
makesquare (file rank)
The file argument is a numeric filter whose value represents a file on the chessboard, with the a
file being 1
, the b
file being 2, and so on.
The rank argument is a numeric filter whose value is a rank on the chessboard.
The makesquare
filter represents the square whose file and rank are equal to its file and rank arguments respectively. If
either of its arguments do not match the position, or if either argumnet is not between 1
and 8
, then the makesquare
filter does not
match the position.
For example
makesquare (2 4)represents the square
b4
. That is,
b4 == makesquare (2 8)will match any position.
Technically, makesquare
filter is a set filter representing a set that contains exactly one square (unless either the file or the rank
is not between 1 and 8, in which case makesquare
represents the empty set of squares.)
string argument to makesquare
In the second form ofmakesquare
, the argument is a single string filter denoting a single square:
makesquare "a3" makesquare "a" + "3"Note the precedence of
makesquare
is just below string concatenation.
If the string argument does not represent a square, then the makesquare
filter does not match.
The functionality of this form of the makesquare
filter is purely for convenience. If x is the string argument to makesquare
, then
makesquare x ≡ {#x==2 makesquare(ascii x[0]- ascii "a" + 1 ascii x[1]= ascii "1")}
This form of the makesquare
filter is typically used for parsing fragments of PGN files or moves,
or the en passant field of a FEN.
Notes
Be careful to get the order of arguments correct: the file precedes the rank, even though it is customary to say "rank and file".
The makesquare
filter is not itself affected by transforms like flip or flipcolor, but its arguments are. Thus
{flip makesquare "b4"} == b4 {flip makesquare (2 4)}== b4 {flip makesquare b4} == [d2,e2,b4,g4,b5,g5,d7,e7]
Note that the string literal "b4"
is not affected by transforms, but the
square b4
, as an argument to str
, is affected by transforms.
Examples
Themakequare
filter is used in flipverticalecho.cql and horizontallysymmetric.cql.