% Etape 1: divise(X,Y) :- 0 is Y mod X. % Etape 2: diviseChif(X,Chiffres) :- name(Y,Chiffres), divise(X,Y). % Etape 3: diviseAvecChiffre(X,[Ch],Chiffres) :- % append(Chiffres,[Ch],LC), diviseChif(X,LC). % Etape 4: diviseSelect(X,Chiffres, AutresChiffres) :- % select(Ch,AutresChiffres,ChiffresRestants), % diviseAvecChiffre(X,[Ch],Chiffres). % Etape 5: cassetete(X,Chiffres, AutresChiffres) :- % select(Ch,AutresChiffres,ChiffresRestants), % diviseAvecChiffre(X,Ch,Chiffres), % Z is X + 1, % cassetete(Z,LC, ChiffresRestants). % call: cassetete(1,[],"123456789",Solution). cassetete(X,Chiffres,[],S) :- name(S,Chiffres). cassetete(X,Chiffres,AutresChiffres,S) :- select(Ch,AutresChiffres, ChiffresRestants), append(Chiffres,[Ch],LC), name(Y,LC), 0 is Y mod X, Z is X + 1, cassetete(Z,LC,ChiffresRestants,S). append([],X,X). append([X|Y],Z,[X|R]) :- append(Y,Z,R). select(X,[X|R],R). select(X,[Y|R],[Y|Z]) :- select(X,R,Z).