ここで検索しても見つかりませんでしたが、これはかなり基本的なことだと思います。
私はプロローグを学んでいて、ルールのある例を見つけました:(隣接を表す)
adj(1, 2). adj(2, 1).
adj(1, 3). adj(3, 1).
adj(3, 4). adj(4, 3).
隣接関係は相互関係であることがわかっているので、これは少し無駄だと思いました。各ペアの1つだけを定義してから、次のように定義するだけで十分です。
adj(X, Y) :-
adj(Y, X), !.
この単純な試みがうまくいかない理由を理解しています。XとYが隣接していない場合、無限ループに陥ります。しかし、すべての場合に機能するようにこれを変更する方法を完全には理解していません。