(* Count and print all solutions to the 8 queens problem. *) MODULE queens; CONST N = 8; TYPE board = ARRAY [1..N] OF [1..N]; PROCEDURE queens(VAR x: board); VAR i, column, row: [1..N]; BEGIN FOR column := 1 TO N DO SOME row := 1 TO N DO FOR i := 1 TO column-1 DO x[i] <> row; x[i] <> row+column-i; x[i] <> row+i-column END; x[column] = row END END END queens; VAR b: board; nrSols,j: INTEGER; BEGIN nrSols := 0; FORALL queens(b) DO FOR j := 1 TO N-1 DO WRITE(b[j], ', ') END; WRITELN(b[N]); nrSols := nrSols + 1; END; WRITELN('Number of solutions = ', nrSols); END queens.