% This samle is from Richard A. O'Keefes book queens(N, Queens) :- length(Queens, N), board(Queens, Board, 0, N, _, _), queens(Board, 0, Queens). board([], [], N, N, _, _). board([_|Queens], [Col-Vars|Board], Col0, N, [_|VR], VC) :- Col is Col0+1, functor(Vars, f, N), constraints(N, Vars, VR, VC), board(Queens, Board, Col, N, VR, [_|VC]). constraints(0, _, _, _) :- !. constraints(N, Row, [R|Rs], [C|Cs]) :- arg(N, Row, R-C), M is N-1, constraints(M, Row, Rs, Cs). queens([], _, []). queens([C|Cs], Row0, [Row-Col|Solution]) :- Row is Row0+1, select(Col-Vars, [C|Cs], Board), arg(Row, Vars, Row-Row), queens(Board, Row, Solution). all_queens(N, All_Solutions):- findall(X, queens(N,X), All_Solutions). %%%%%%%%%% %% Build %%%%%%%%%% build:- qsave_program('E:/projekteWEB/SBSDemo/ChessBoard/prolog/queens_boot.qlf', [ goal(true) , stand_alone(false) , autoload(true) ]). %%%%%%%%%% %% tests %%%%%%%%%% tq(N):- all_queens(N, All_Solutions), member(X,All_Solutions), write_ln(X), fail;true.