例如,如果我有这个祖先,我该怎么说是谁是混蛋儿子或女儿?
ancestor(frank,mary).
ancestor(frank,andrew).
ancestor(frank,jake).
ancestor(joanne,mary).
ancestor(joanne,andrew).
married(frank,joanne).
法律(我没有发布更多的代码,因为它与此无关)
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).
只是为了根据评论来汇总此问题的答案。
假设该人是一个混蛋,如果父母未婚,可以写
bastard(X) :- father(F, X), mother(M, X), + married(F, M).
如果您的序言方言不支持+
(尽管它在ISO标准中),则应使用not
:
bastard(X) :- father(F, X), mother(M, X), not(married(F, M)).