Bonjour bonjour,

je viens solliciter votre aide car je dois résoudre l'énigme des seaux dans le langage Prolog, j'ai commencé à chercher la solution mais je me retrouve bloqué, et vu le peu d'exemples et d'aides disponibles en ligne je viens demander de l'aide. Voici le problème :

On considère qu’un état du problème est défini par deux entiers : les contenus des deux seaux. Ecrire le prédicat solution/1 qui détermine la liste des états permettant de passer de [0,0] à un état comprenant la valeur 4. Le résultat est donc une liste de listes à 2 éléments représentant le contenu des deux seaux. Par exemple : [[0,0],[5,0],[2,3],...... [4,0]]. Initialement, cette liste est vide. Les opérations possibles sont :

- remplir le seau 1 (seau de 5 litres)

- remplir le seau 2 (seau de 3 litres)

- vider le seau 1 dans le seau 2 - vider le seau 2 dans le seau 1

- vider complètement le seau 1

- vider complètement le seau 2

a) Ecrire le prédicat solution/1, il fera appel à un prédicat solution/2 qui à partir d’une liste intermédiaire d’états, détermine la liste solution.

b) Ecrire le prédicat best_solution/1 qui calcule toutes les solutions possibles, affiche le nombre de solutions trouvées, en sélectionne la plus courte et l’affiche

Voici le code que j'ai fait pour répondre à la première question :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
operation([S1,S2],[5,S2]):- S1=\=5.
operation([S1,S2],[S1,3]):- S2=\=3.
operation([S1,S2],[0,S2]):- S1=\=0.
operation([S1,S2],[S1,0]):- S2=\=0.
operation([S1,S2],[S3,0]):- S3=<5, S3 is S1+S2.
operation([S1,S2],[5,S4]):- S4>5, S4 is S1+S2-5.
operation([S1,S2],[0,S4]):- S4<3, S4 is S1+S2.
operation([S1,S2],[S3,3]):- S1+S2>3, S3 is S1+S2-3.
 
 
solution(S,S):-last(S,[4,_]).
solution(L,S):-last(L,[A,B]), operation([A,B],[S1,S2]),not(memberchk([S1,S2],L)),append(L,[S1,S2],L1),solution(L1,S).
 
solution(S):- solution([0,0],S).
Cependant quand je cherche solution(S). Prolog m'affiche "false". Pourriez-vous m'aider?