【问题标题】:Is this logically and syntactically correct -- Nested Fact?这在逻辑上和句法上是否正确——嵌套事实?
【发布时间】:2019-11-25 01:06:19
【问题描述】:

如果 D 是男性并且我的女儿是 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).

【问题讨论】:

    标签: prolog logic swi-prolog-for-sharing


    【解决方案1】:

    事实是总是真实的谓词。所以,

    male(X).
    

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

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

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

    '提升''join'变量,例如

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-01-17
      • 1970-01-01
      • 1970-01-01
      • 2020-11-20
      • 1970-01-01
      • 2019-07-18
      • 2011-08-22
      • 2019-07-10
      相关资源
      最近更新 更多