Ответ 1
Я не знаю, что вы подразумеваете под "не равным" (не объединяется?), но вы можете попробовать:
X \= Y
not(X = Y)
\+ (X = Y)
Я не могу найти документацию на знаке "не равно" в Visual Prolog. Пожалуйста, предоставьте правильное решение этой проблемы:
class predicates
sister : (string Person, string Sister) nondeterm(o,o).
clauses
sister(Person, Sister) :-
Person [not-equal-sign] Sister,
parent(Person, Parent),
parent(Sister, Parent),
woman(Sister).
Спасибо заранее!
Я не знаю, что вы подразумеваете под "не равным" (не объединяется?), но вы можете попробовать:
X \= Y
not(X = Y)
\+ (X = Y)
Документация по второму варианту, указанному Kaarel, находится в эта ссылка на Visual Prolog.
Однако проблема с вашим кодом идет немного глубже. Вам нужно дождаться тестирования неравновесия до тех пор, пока оба слова Person и Sister не будут связаны, поэтому переупорядочивайте такие вещи:
sister(Person, Sister) :-
parent(Person, Parent),
parent(Sister, Parent),
not(Person = Sister),
woman(Sister).
Существует также синтаксис для инфиксного оператора "< > ", который означает различные (или разные). Как только эти два члена связаны, это должно дать тот же результат, что и проверка того, нельзя ли унифицировать термины, что и делает вышеуказанная конструкция.