Bonjour,
J'ai un petit programme en prolog pour représenter une Rumba des nombres.
En envoyant à Prolog l'état initial, l'état final, une liste L et un nombre de déplacements; il me renvoi L (les déplacements possible) si bien sur il peut atteindre l'état final en ce nombre de déplacements.
Voici un petit exemple :
Il me retourne donc une liste de déplacements car c'est possible.
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 //Nombre de déplacement à 0 | ?- rumba(jeu([vert(1),bleu(1),vert(3)], [rouge(3),bleu(2),vert(2)], [bleu(3),rouge(1),rouge(2)], []), jeu([rouge(3),bleu(1),vert(3)], [vert(1),bleu(2),vert(2)], [bleu(3),rouge(1),rouge(2)], []),L,0). no //Nombre de déplacement à 1 | ?- rumba(jeu([vert(1),bleu(1),vert(3)], [rouge(3),bleu(2),vert(2)], [bleu(3),rouge(1),rouge(2)], []), jeu([rouge(3),bleu(1),vert(3)], [vert(1),bleu(2),vert(2)], [bleu(3),rouge(1),rouge(2)], []),L,1). no //Nombre de déplacement à 2 | ?- rumba(jeu([vert(1),bleu(1),vert(3)], [rouge(3),bleu(2),vert(2)], [bleu(3),rouge(1),rouge(2)], []), jeu([rouge(3),bleu(1),vert(3)], [vert(1),bleu(2),vert(2)], [bleu(3),rouge(1),rouge(2)], []),L,2). no //Nombre de déplacement à 3 | ?- rumba(jeu([vert(1),bleu(1),vert(3)], [rouge(3),bleu(2),vert(2)], [bleu(3),rouge(1),rouge(2)], []), jeu([rouge(3),bleu(1),vert(3)], [vert(1),bleu(2),vert(2)], [bleu(3),rouge(1),rouge(2)], []),L,3). L = [1==>4,2==>1,4==>2]
Voici mon code :
et donc voici mon problème (enfin)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 % Le prédicat rumba rumba(jeu(L1,L2,L3,L4),jeu(L1,L2,L3,L4),[],0). rumba(jeu(L1,L2,L3,L4),jeu(L1__,L2__,L3__,L4__),[D|LD],R1) :- R1 > 0, R_ is R1 - 1, deplacement(jeu(L1,L2,L3,L4),jeu(L1_,L2_,L3_,L4_),D), rumba(jeu(L1_,L2_,L3_,L4_),jeu(L1__,L2__,L3__,L4__),LD,R_).
Je voudrais envoyer à Prolog juste l'état initial, l'état final et L et qu'il me trouve à chaque fois ma liste L; que mon predicat test pour déplacement égal à 0, puis si il ne trouve pas de solution, qu'il teste pour déplacement égal à 1 et, sinon 2 et ainsi de suite. Je voudra.is commencer à 0 car je doit trouver le plus court chemin pour y arriver.
Le problème ne doit pas être compliqué mais je flanche sur ça !!
J'ai éssayer différents code mais cela ne marche pas!! cela doit ressembler à quelque chose comme ça je pense :
Merci en avance pour vos réponses, étant débutant en prolog, je vous prie de ne pas trop être compliqué dans vos réponses
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 % Le prédicat rumba rumba(jeu(L1,L2,L3,L4),jeu(L1,L2,L3,L4),L) :- entier(R), jouer(jeu(L1,L2,L3,L4),jeu(L1_,L2_,L3_,L4_),L,R),!. jouer(jeu(L1,L2,L3,L4),jeu(L1,L2,L3,L4),[],0). jouer(jeu(L1,L2,L3,L4),jeu(L1__,L2__,L3__,L4__),[D|LD],R) :- R > 0, R_ is R - 1, deplacement(jeu(L1,L2,L3,L4),jeu(L1_,L2_,L3_,L4_),D), jouer(jeu(L1_,L2_,L3_,L4_),jeu(L1__,L2__,L3__,L4__),LD,R_). % Le predicat entier entier(0). entier(I) :- I_ is I + 1, entier(I_).
Partager