:-use_module(library(clpfd)).

liste_diviseurs(N,L):-
    findall(
        Div,
		(between(1,N,Div),N mod Div #= 0),
        L
        ).

est_premier(N):-liste_diviseurs(N,[1,N]).

arc(a,b,3).
arc(a,b,3).
arc(b,c,4).
arc(b,c,4).
arc(c,c,4).

%findall((S1,S2),arc(S1,S2,_),L).
/*
  bagof(C,arc(A,B,C),L). 	->3listes
  bagof(C,A^arc(A,B,C),L). 	->2listes
  bagof(C,A^B^arc(A,B,C),L).	->1listes

f(a,b)=..L.
Term=[f(a,b)].
functor(f(a,b),Foncteur,Arite).
functor(Term,f,2).
arg(1,f(a,b),X).
arg(2,f(a,b),X).
*/

pas_d_attaque(_,[],_).
pas_d_attaque(X,[X1|L],D):-
   	abs(X-X1) #\= D,
    D1 #= D+1,
    pas_d_attaque(X,L,D1).

valide([]).
valide([X|L]):-
    valide(L),
	pas_d_attaque(X,L,1).


n_dames(N,Liste_permutee):-
   	numlist(1,N,Liste_1_N),
    permutation(Liste_1_N,Liste_permutee),
    valide(Liste_permutee).