这在逻辑上和句法上是否正确——嵌套事实?

Is this logically and syntactically correct -- Nested Fact?

我正在尝试编写规则,即 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).

一个事实是一个总是真谓词。所以,

male(X).

意味着每个 X都是男性。显然,这不是您所在领域的正确公理。当您收到有关单例的警告时 X,您不应忽略它,而应尝试理解它的含义。

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

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

'lifting up' 'join' 个变量,例如

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