% n-queens with finite domains

:- setval(domain,number).

queen(N,L):- 
	length(L,N), 
	L::1..N,
	queen(L).

queen([]).
queen([X|Xs]):- safe(X,Xs,1),queen(Xs).

safe(X,[],N).
safe(X,[H|T],N):- no_attack(X,H,N), M is N+1, safe(X,T,M).

no_attack(X,Y,N):- X ne Y, X ne Y-N, X ne Y+N, Y ne X-N, Y ne X+N.