Prolog 序言,家谱怎么说他们是混蛋

Prolog 序言,家谱怎么说他们是混蛋,prolog,family-tree,Prolog,Family Tree,例如,如果我有这个祖先,我怎么能说谁是私生子或女儿 ancestor(frank,mary). ancestor(frank,andrew). ancestor(frank,jake). ancestor(joanne,mary). ancestor(joanne,andrew). married(frank,joanne). 法律(还有一些我没有发布的代码,因为它不相关) 只是根据评论总结一下这个问题的答案 假设这个人是一个私生子,如果他们的父母没有结婚,你可以写信 私生子(X):-父亲(

例如,如果我有这个祖先,我怎么能说谁是私生子或女儿

ancestor(frank,mary).
ancestor(frank,andrew).
ancestor(frank,jake).
ancestor(joanne,mary).
ancestor(joanne,andrew).

married(frank,joanne).
法律(还有一些我没有发布的代码,因为它不相关)


只是根据评论总结一下这个问题的答案

假设这个人是一个私生子,如果他们的父母没有结婚,你可以写信

私生子(X):-父亲(F,X),母亲(M,X),\+已婚(F,M)。

如果您的Prolog方言不支持
\+
(尽管它在ISO标准中),您应该使用
not


私生子(X):-父亲(F,X),母亲(M,X),未(已婚(F,M))。

根据“私生子”的定义,我认为你需要一些事实来说明谁与谁结婚。你真的不能仅仅凭父系关系就知道谁是“混蛋”,这是你的全部事实。@Lourger我编辑过,并说:已婚(弗兰克,乔安妮)。很好,现在你可以知道某人是否是混蛋(他们的父母没有结婚)。例如,
杂种(X):-父亲(F,X),母亲(M,X),\+已婚(F,M)。
@潜伏者谢谢,感谢你的帮助!它是否存在另一种方式而不是“\+”因为它给了我这个错误:
杂种(X):-父亲(F,X),母亲(M,X),\+已婚(F,M)。语法分析器中出现语法错误
mother(X,Y) :- ancester(X,Y),gender(X,female).
father(X,Y) :- ancester(X,Y),gender(X,male).

son(X,Y) :- father(Y,X).

sister(X,Y) :- ancester(Z,X),ancester(Z,Y),X\==Y,gender(Y,female).
brother(X,Y) :- ancester(Z,Y),ancester(Z,X), X\==Y,gender(Y,male).

grandfahter(X,Y) :- ancester(X,Z),ancester(Z,Y),gender(X,male).
grandmother(X,Y) :- ancester(X,Z),ancester(Z,Y),gender(X,female).