rotate90

rotate90 is a transform filter corresponding to the following 4 basic transforms.
  • id, the identity
  • rotate90: counterclockwise rotation about the board center by 90°
  • rotate180: rotation by 180° about the board center
  • rotate270: clockwise rotation about the board center by 90°

rotate90 is normally called with a single argument filter, F:

      rotate90 F

rotate90 also accepts an optional count parameter. rotate90 F matches the current position if any transformation of F by one of the 4 basic transforms above matches the current position. These 4 transforms are examples of dihedral transforms.

For example, suppose F is the filter {Ka1 kh8}, matching a position in which the white king is on a1 and the black king is on h8. If we transform this filter by rotate90 we get the new filter {Kh1 ka8}. That is, if spin the chessboard 90° counterclockwise about the center of the board, the a1 square will wind up on h1 and the h8 square will wind up on a8. The filters that results from transforming {Ka1 kh8} by all the elements of rotate90, which is to say the identity and the three rotations, are:

  {Ka1 kh8}      
  {Kh1 ka8}    
  {Ka8 kh1}      
  {Kh8 ka1}

The filter rotate90 {Ka1 kh8} will thus match a position if any of these 4 filters match the position, that is, if the white and black king are on opposite corners. (This can also be done, more efficiently, via k==diagonal 7 K[a1,h1] )

If F is a set filter then so is

rotate90 F

in which case its value is the union of the values of each of the sets represented by each transformed version of F.

For example,

rotate90 a1 is the set [a1,h1,a8,h8].

If F is a numeric filter then so is rotate90 F in which case its value is the maximum of the values of the 4 rotations of F which match the position.

rotate90 count F

is a numeric filter whose value is the number of distinct matching transformed versions of F. For example, if the current position is the initial position, then

rotate90 count find {Qa1 qh8}

is equal to 0 if neither {Qa1 qh8} nor {Qh1 qa8} occur in the game; is equal to 1 if exactly one of these configurations does; and is equal to 2 if both of them do.

The rotate90 filter also modifies directions parameters and filters. Thus,

rotate90 ray right (R K)

will match if and only if

flip ray orthogonal (R K)

matches.