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).