Bonjour, tout d'abord, voici le code qui me pose problème :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
---------------------------TAQUIN-------------------------------------
 
% On utilise la structure etatCourant(a,b,c,d,e,f,g,h) pour définir l'étant dans lequel on se trouve.
 
% On teste si, en passant d'un état courant à un autre, on respecte les consignes de déplacement des carrés.
 
% Tout d'abord pour les lignes :
 
etatSuivant(etatCourant(0,A2,A3,B1,B2,B3,C1,C2,C3),
			etatCourant(B1,A2,A3,0,B2,B3,C1,C2,C3)).
etatSuivant(etatCourant(X,A2,A3,0,B2,B3,C1,C2,C3),
			etatCourant(0,A2,A3,X,B2,B3,C1,C2,C3)).
 
etatSuivant(etatCourant(A1,A2,A3,X,B2,B3,0,C2,C3),
			etatCourant(A1,A2,A3,0,B2,B3,X,C2,C3)).
etatSuivant(etatCourant(A1,A2,A3,0,B2,B3,X,C2,C3),
			etatCourant(A1,A2,A3,X,B2,B3,0,C2,C3)).
 
etatSuivant(etatCourant(A1,0,A3,B1,X,B3,C1,C2,C3),
			etatCourant(A1,X,A3,B1,0,B3,C1,C2,C3)).
etatSuivant(etatCourant(A1,X,A3,B1,0,B3,C1,C2,C3),
			etatCourant(A1,0,A3,B1,X,B3,C1,C2,C3)).
 
etatSuivant(etatCourant(A1,A2,A3,B1,0,B3,C1,C2,C3),
			etatCourant(A1,A2,A3,B1,C2,B3,C1,0,C3)).
etatSuivant(etatCourant(A1,A2,A3,B1,X,B3,C1,0,C3),
			etatCourant(A1,A2,A3,B1,0,B3,C1,X,C3)).
 
etatSuivant(etatCourant(A1,A2,0,B1,B2,X,C1,C2,C3),
			etatCourant(A1,A2,X,B1,B2,0,C1,C2,C3)).
etatSuivant(etatCourant(A1,A2,X,B1,B2,0,C1,C2,C3),
			etatCourant(A1,A2,0,B1,B2,X,C1,C2,C3)).
 
etatSuivant(etatCourant(A1,A2,A3,B1,B2,0,C1,C2,X),
			etatCourant(A1,A2,A3,B1,B2,X,C1,C2,0)).
etatSuivant(etatCourant(A1,A2,A3,B1,B2,X,C1,C2,0),
			etatCourant(A1,A2,A3,B1,B2,0,C1,C2,X)).
 
% Puis pour les colonnes :
 
etatSuivant(etatCourant(X,0,A3,B1,B2,B3,C1,C2,C3),
			etatCourant(0,X,A3,B1,B2,B3,C1,C2,C3)).
etatSuivant(etatCourant(0,X,A3,B1,B2,B3,C1,C2,C3),
			etatCourant(X,0,A3,B1,B2,B3,C1,C2,C3)).
 
etatSuivant(etatCourant(A1,X,0,B1,B2,B3,C1,C2,C3),
			etatCourant(A1,0,X,B1,B2,B3,C1,C2,C3)).
etatSuivant(etatCourant(A1,0,X,B1,B2,B3,C1,C2,C3),
			etatCourant(A1,X,0,B1,B2,B3,C1,C2,C3)).
 
etatSuivant(etatCourant(A1,A2,A3,X,0,B3,C1,C2,C3),
			etatCourant(A1,A2,A3,0,X,B3,C1,C2,C3)).
etatSuivant(etatCourant(A1,A2,A3,0,X,B3,C1,C2,C3),
			etatCourant(A1,A2,A3,X,0,B3,C1,C2,C3)).
 
etatSuivant(etatCourant(A1,A2,A3,B1,X,0,C1,C2,C3),
			etatCourant(A1,A2,A3,B1,0,X,C1,C2,C3)).
etatSuivant(etatCourant(A1,A2,A3,B1,0,X,C1,C2,C3),
			etatCourant(A1,A2,A3,B1,X,0,C1,C2,C3)).
 
etatSuivant(etatCourant(A1,A2,A3,B1,B2,B3,X,0,C3),
			etatCourant(A1,A2,A3,B1,B2,B3,0,X,C3)).
etatSuivant(etatCourant(A1,A2,A3,B1,B2,B3,0,X,C3),
			etatCourant(A1,A2,A3,B1,B2,B3,X,0,C3)).
 
etatSuivant(etatCourant(A1,A2,A3,B1,B2,B3,C1,X,0),
			etatCourant(A1,A2,A3,B1,B2,B3,C1,0,X)).
etatSuivant(etatCourant(A1,A2,A3,B1,B2,B3,C1,0,X),
			etatCourant(A1,A2,A3,B1,B2,B3,C1,X,0)).
 
possible_taquin(X, X, CList, CList).
possible_taquin(X, Y, CList, List) :-
	etatSuivant(X, Z),
	not(member(Z, CList)),
	possible_taquin(Z, Y, [Z | CList], List).
 
chemin_taquin(X, Y, CheminParcouru) :- possible_taquin(X, Y, [X], CheminParcouru).
 
--------------------------------------------------------------------------------
Le but est de créer un jeu de taquin, le problème c'est que quand je fais appel à ma méthode chemin_taquin Par exemple :
chemin_taquin(etatCourant(0,A,B,C,D,E,F,G,H),etatCourant(C,A,B,0,D,E,F,G,H),L).
Et bien en sortie L = [etatCourant(0,A,B,0,D,E,F,G,H)] (en sortie je récupère le chemin parcouru sous forme de la liste des états traversés) alors que le résultat devrait être logiquement :
L = [etatCourant(0,A,B,C,D,E,F,G,H)] car on arrive directement au résultat en 1 mouvement.

Voilà j'espère avoir été assez clair et pas trop long.
Merci d'avance pour votre aide, dont j'ai vraiment besoin !!
Bonne journée.
Cordialement, Salandar.