; Each possible coordinate on the board. define output Coord Integer Coord 1. Coord a :- Coord b, b < 8, a = b + 1. ; Each possible placement of a queen. define output decision Queen(Coord, Coord) Queen(row, col) :- Coord row, Coord col. ; Exactly one queen goes on each row. :- @count col : Queen(row, _) = 1. ; Exactly one queen goes on each column. :- @count col : Queen(_, col) = 1. ; At most one queen can go along each main diagonal. :- @count diag : { Queen(row, col), diag = row + col } <= 1. ; At most one queen can go along each orthogonal diagonal. :- @count diag : { Queen(row, col), diag = row - col } <= 1.