グラフの2つのノードが隣接しているかどうかをチェックする手続きを書こうとしています。プロローグ内でグラフの隣接手続きを書く
私はSWI-prologを使用しています。
私がしようとしています:
adjacent(X,Y,graph(_,E)):-
member(e(X,Y), E).
しかし、これは動作しないと私は理由として困惑しています。
私はこれをテストグラフとして使用しています。
tem(graph([s,t,u,v], [e(a,b), e(b,d), e(b,c), e(c,d)])).
そして、私はこのようにREPLでそれをチェックしています:
?- tem(graph(_, E)), adjacent(a, b, E).
false.
しかし、それはtrueを返す必要がありますので、それらの2が両方とも隣接しています。繰り返すように
「s」で終わる変数を* lists *として使用するのが良い命名規則です。例: 'graph(_、Es)'。これは、「Es」がリストであることを明確にします。対照的に、 'adjacent(a、q、G)'を使うときは 'G'がリストではないと期待します。 – mat