2010-12-13 45 views
2

Je suis nouveau à Prolog et j'essaye de modéliser une devinette comme l'énigme d'Einstein, également connue sous le nom d'énigme de Zebra, (mais avec 10 maisons et 30 indices) dans Prolog et j'emploie cet exemple de modèle comme point de départ:Einstein l'énigme

http://www.baptiste-wicht.com/2010/09/solve-einsteins-riddle-using-prolog/

mais dans mon énigme, je dois pouvoir dire que X est juste de Y. Et je ne veux pas directement droit, mais à droite de la liste. Donc Y peut être dans la maison 1, tandis que X dans la maison 9.

Comment puis-je faire cela dans Prolog? Je pensais à un prédicat qui dit que Y est un membre de la liste construit en prenant X et tous les éléments avant X hors de cette liste, mais je ne suis pas sûr de savoir comment faire cela ou faire cela pour que je puisse l'intégrer l'exemple mentionné ci-dessus.

Répondre

1

droite (X, Y): - droite (X, Z), droite (Z, Y). Par conséquent, vous utilisez simplement une fermeture transitive pour définir le prédicat correct, puis définissez les éléments qui sont directement les uns à côté des autres.