2

私は Prolog を初めて使用し、Prolog でゼブラのなぞなぞとしても知られるアインシュタインのなぞなぞのようななぞなぞをモデル化しようとしています (ただし、10 の家と 30 のヒントがあります)。このモデルの例を出発点として使用しています。

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

しかし、私のなぞなぞでは、X が Y の右であると言えなければなりません。そして、直接右という意味ではなく、リスト内で右という意味です。したがって、Y は家 1 に、X は家 9 にいることができます。

Prologでこれを行うにはどうすればよいですか? Y は、X と X の前のすべての要素をそのリストから取り出すことによって構築されたリストのメンバーであるという述語について考えていましたが、それを行う方法や、それを適合させる方法がわかりません。前述の例。

4

1 に答える 1

1

右(X、Y):-右(X、Z)、右(Z、Y)。

したがって、推移閉包を使用して適切な述語を定義し、次に互いに直接隣接する要素を定義するだけです。

于 2010-12-13T14:29:53.567 に答える