0

我正在尝试编写规则,即 D 是我的(我的)女婿,如果他们是男性,而我的女儿是 D 的配偶。当我在 swish 上运行时,除了一些单例变量外,我没有收到任何错误警告。不过,我不相信我写的这个正确..如果这有道理,有人可以为我澄清一下吗?谢谢你。

male(X).
male(me).
female(X).
child(X,Y).
spouse(X,Y).

daughter(A,me) :-
    female(A), child(me, A).
mother(A,me) :-
    female(A), child(me, A).
son_in_law(D,me) :-
    male(D), spouse(daughter(A,me), D).
4

1 回答 1

1

事实永远是真实的谓词。所以,

male(X).

意味着每个 X人都是男性。显然,对于您的领域来说,这不是一个正确的公理。当你收到关于 singleton 的警告时X,你不应该忽略它,而应该尝试理解它的含义。

此外,在语法上,嵌套谓词没有意义。你应该重写这个子句

..., spouse(daughter(A,me), D).

例如,“提升”“加入”变量

..., daughter(A,me), spouse(A, D).
于 2019-11-25T07:30:26.577 回答