31

我在 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).
4

2 回答 2

62

我不知道“不等于”是什么意思(不统一?),但你可以试试这些:

X \= Y
not(X = Y)
\+ (X = Y)
于 2011-09-20T12:49:59.840 回答
9

Kaarel 指出的第二个变体的文档可以在这个 Visual Prolog 参考页面中找到。

但是,您的代码的问题要更深一些。您需要等待不相等的测试,直到两个术语 Person 和 Sister 都被绑定,所以重新安排这样的事情:

    sister(Person, Sister) :-
        parent(Person, Parent),
        parent(Sister, Parent),
        not(Person = Sister),
        woman(Sister).

中缀运算符“<>”也有语法,表示不同(或不同)。一旦这两个术语被绑定,这应该与检查术语是否不能统一给出相同的结果,这就是上述构造所做的。

于 2011-09-20T13:30:35.033 回答