n-dame.pl
ndamen(N, Ds) :-
range(N, NL, Ds),
permutation(NL, Ds), % generate
sicher(Ds). % test
% Zahlen 1..N, N Variablen
range(0, [], []).
range(N, [N|L], [_|Ds]) :-
N >= 0,
N1 is N-1,
range(N1, L, Ds).
sicher([]).
sicher([D|Ds]) :-
sicher(Ds, 1, D),
sicher(Ds).
% Dame sicher wenn Diagonale frei
sicher([], _, _).
sicher([TD|Ds], N, D) :-
TD + N =\= D,
TD - N =\= D,
N1 is N+1,
sicher(Ds, N1, D).
[ndame].
% ndame compiled 0.00 sec, 1,872 bytes
Yes
?- ndamen(8, X).
X = [4, 7, 3, 8, 2, 5, 1, 6] ;
X = [3, 6, 4, 2, 8, 5, 7, 1] ;
X = [3, 5, 2, 8, 6, 4, 7, 1] ;
X = [6, 3, 7, 2, 4, 8, 1, 5] ;
X = [3, 6, 8, 2, 4, 1, 7, 5] ;
...
No