:- use_module(library(clpfd)). queens([E1,E2,E3,E4,E5,E6,E7,E8]) :- E1 in 1..8, E2 in 1..8, E3 in 1..8, E4 in 1..8, E5 in 1..8, E6 in 1..8, E7 in 1..8, E8 in 1..8, safe([E1,E2,E3,E4,E5,E6,E7,E8]), labeling([ffc],[E1,E2,E3,E4,E5,E6,E7,E8]). notattack(X,Xs) :- notattack(X,Xs,1). notattack(X,[],N). notattack(X,[Y|Ys],N) :- X #\= Y, X #\= Y - N, X #\= Y + N, N1 is N + 1, notattack(X,Ys,N1). safe([]). safe([F|T]) :- notattack(F,T), safe(T).