Salut tout le monde !
Voila, comme beaucoup de monde, je suis entrain de coder un solveur de sudoku. Sauf que je débute sous prolog, donc c'est pas évident.
J'ai bien réussi a définir les contraintes :
- tous les termes d'une ligne sont différents
- tous les termes d'une colonne sont différents
- tous les termes d'un carré sont différents
Maintenant, je veux définir la contrainte sur le fait que les termes sont compris entre 1 et 9.
J'ai donc définit les prédicats :
Si je teste sur un sudoku résolu, il me renvoit bien true, donc a priori, il arrive bien a tester si des valeurs sont comprises entre 1 et 9.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 %toutes les valeurs du sudoku sont entre 1 et 9 tous_entre_un_et_neuf([]). tous_entre_un_et_neuf([T|R]) :- entre_un_et_neuf(T), tous_entre_un_et_neuf(R). %imposer qu'une variable soit comprise entre 1 et 9 entre_un_et_neuf(X) :- le(1,X), le(X,9), intsplit([X]).
Cependant, lorsque je passe ma grille de variables, il part en boucle infinie, en m'affichant :
true;
true;
true;
true;
etc...
Mon appel se fait comme suit :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 GRILLE = [ A1,A2,A3,A4,A5,A6,A7,A8,A9, B1,B2,B3,B4,B5,B6,B7,B8,B9, C1,C2,C3,C4,C5,C6,C7,C8,C9, D1,D2,D3,D4,D5,D6,D7,D8,D9, E1,E2,E3,E4,E5,E6,E7,E8,E9, F1,F2,F3,F4,F5,F6,F7,F8,F9, G1,G2,G3,G4,G5,G6,G7,G8,G9, H1,H2,H3,H4,H5,H6,H7,H8,H9, I1,I2,I3,I4,I5,I6,I7,I8,I9 ], tous_entre_un_et_neuf(GRILLE).
Pour info, c'est un projet scolaire, donc il y a des contraintes de travail : prolog IV et pas de module externe. On code tout nous-mêmes...
Voila, je vois pas trop où est mon erreur. Si vous pouviez m'éclairer, ça serait sympa
D'avance merci
Partager