Использование \ == / 2 или dif / 2

Если я хочу убедиться, что две переменные не соответствуют одному и тому же термину, каков предпочтительный способ сделать это?

Допустим, мне нужно найти ориентированные ребра в графе, а у узла не может быть ребра:

node(a, x, y). node(b, z, x). node(c, y, y).

(ребра здесь a -> c, b -> a, ноне с -> в)

Следующие работы:

edge(A, B) :- node(A, _, X), node(B, X, _), A \== B.

Это тоже работает [swi-prolog]:

edge(A, B) :- dif(A, B), node(A, _, X), node(B, X, _).

Очевидно, это не работает (потому что ни A, ни B еще не созданы?):

edge(A, B) :- A \== B, node(A, _, X), node(B, X, _).

Я думаю, что моя проблема с первым решением заключается в том, что с более сложнымnode предикат, много ненужных объединений может иметь место доedge выходит из строя.dif с другой стороны, находится в библиотеке, что говорит о том, что она не предназначена для использования в таком простом случае (хотя она выполняет именно ту функцию, которую я, похоже, ищу).

Ответы на вопрос(3)

Ваш ответ на вопрос