La base de connaissance doit contenir les positions de départ et d'arrivée :
depart( [blanc, blanc, blanc, vide, noir, noir, noir] ). arrivee( [noir, noir, noir, vide, blanc, blanc, blanc] ).
Ensuite, on doit définir les différents coups possibles.
On recherche la configuration permettant un coup en tête de liste :
Par exemple (à compléter avec tous les coups possibles) :
coup( [blanc | [vide | Cases]] , [vide | [blanc | Cases]]).
Il y a évidemment échec de la règle si on ne la trouve nulle part (si on arrive en fin de liste).
Si la configuration sur laquelle on doit jouer est la configuration finale, c'est fini :
jouer( Config, [Config] ) :- arrivee( Config ).
Sinon, on essaye un coup :
jouer( Config, [Config|ConfigsSuivantes] ) :- coup( Config, ConfigSuivante), jouer( ConfigSuivante, ConfigsSuivantes).
Reste finalement à définir :
sixpions (ListeConfigs) :- ...