2010-12-13 15 views
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を取って作られたリストのメンバーだと言う述語について考えていましたが、それをどうやって行うかわからない前述の例。

答えて

1

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

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