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
|
PRIDICATES
trouvechemin(etatInitial,etatfinal,etatempruntes,solution).
deplace(etat(X,X,souris,fromage),etat(Y,Y,souris,fromage))
deplace(etat(X,chat,X,fromage),etat(Y,chat,Y,fromage))
deplace(etat(X,chat,X,souris,X),etat(Y,chat,souris,Y))
deplace(etat(X,chat,X,souris,fromage),etat(Y,chat,souris,fromage))
inverse(gauche,droite).
inverse(droite,gauche).
verifier(etat(paysan,X,X,-)).
verifier(etat(paysan,_,X,X)).
membre(X,[X|_]).
membre(X,[_|liste]):-membre(X,liste).
affichechemin([etatdebut,etatfinal|finchemine]).
trans(etat(X,chat,souris,fromage),etat(Y,chat,souris,fromage)).
trans(etat(X,X,souris,fromage),etat(Y,Y,souris,fromage)).
trans(etat(X,chat,X,fromage),etat(Y,chat,Y,fromage)).
trans(etat(X,chat,souris,X),etat(Y,chat,souris,Y)).
write(A,X,B,Y,C).
CLAUSES
trouvechemin(etatInitial,etatfinal,etatempruntes,solution):-deplace(etatInitial,etatsuivant),
not(verifiecontraintes(etatsuivant)),
not(estmembre(etatsuivant,etatempruntes)),
trouvechemin(etatInitial,etatfinal,[etatsuivant|etatempruntes],solution).
trouvechemin(etatInitial,etatfinal,solution,solution).
deplace(etat(X,X,souris,fromage),etat(Y,Y,souris,fromage)):-inverse(X,Y).
deplace(etat(X,chat,X,fromage),etat(Y,chat,Y,fromage)):-inverse(X,Y).
deplace(etat(X,chat,X,souris,X),etat(Y,chat,souris,Y)):-inverse(X,Y).
deplace(etat(X,chat,X,souris,fromage),etat(Y,chat,souris,fromage)):-inverse(X,Y).
inverse(gauche,droite).
inverse(droite,gauche).
verifier(etat(paysan,X,X,-))-:inverse(paysan,X),!.
verifier(etat(paysan,_,X,X))-:inverse(paysan,X),!.
membre(X,[X|_]):-! .
membre(X,[_|liste]):-membre(X,liste).
affichechemin([etatdebut,etatfinal|finchemine]):-affichechemin([etatfinal|finchemine]),
trans(etatfinal,etatdebut).
trans(etat(X,chat,souris,fromage),etat(Y,chat,souris,fromage)):-!,write(' le paysan traverse la rivierede ',X ,' a ',Y,'\n').
trans(etat(X,X,souris,fromage),etat(Y,Y,souris,fromage)):-!,write(' le paysan et le chat traverse la riviere de ',X,' a ',Y,'\n').
trans(etat(X,chat,X,fromage),etat(Y,chat,Y,fromage)):-!,write(' le paysan et sa souris traverse la riviere de ',X,' a ',Y,'\n').
trans(etat(X,chat,souris,X),etat(Y,chat,souris,Y)):-!,write(' le paysan et son fromage traverse la riviere de ',X,' a ',Y,'\n').
write(A,X,B,Y,C) :- write(A),write(X),write(B),write(Y),write(C).
GOAL
?-:initial(rechrche(etat(gauche,gauche,gauche,gauche),etat(droit,droit,droit,droit,))). |
Partager