[英]How to write a Prolog rule to define a predicate?
这是作业:在 Prolog 程序中,定义了谓词:
mother(M,Y)
— M是Y的母亲father(F,X)
— F是X的父亲编写 Prolog 代码实现谓词:
cousins(X,Y)
— X和Y是表亲brother_or_sister(X,Y)
— X和Y是彼此的兄弟姐妹。我的尝试:
mother(m1, nicolas).
father(f1,nicolas).
mother(m2, mark).
father(f2, mark).
father(f3, f1).
mother(m3, f1).
father(f3, f2).
mother(m3, f2).
brother_or_sister(X, Y) :-
father(f3, X),
father(f3, Y),
mother(m3, X),
mother(m3, Y).
cousins(X, Y) :-
(
mother(m1, X),
father(f1, X),
mother(m2, Y),
father(f2, Y)
)
(
(
brother_or_sister(m1, m2) ;
brother_or_sister(f1, f2)
)
;
(
brother_or_sister(f1, m2) ;
brother_or_sister(m1, f2)
).
程序 output:
true
false
虽然这应该是真的
请帮忙!
兄弟姐妹是手足。 如果两个人有共同的出身,则他们是兄弟姐妹(如果他们只有一个共同的父母,则他们是同父异母的兄弟姐妹)。 所以我们可以这样说:
parents(F:M,X) :- mother(M,X), father(F,X) .
sibling(X,Y) :- parents(F:M,X), parents(F:M,Y) .
同样,如果两个人的父母是彼此的兄弟姐妹,那么他们就是堂兄弟姐妹。 这导致:
parent(P,X) :- father(P,X) .
parent(P,X) :- mother(P,X) .
cousin(X,Y) :- parent(Px,X), parent(Py,Y), sibling(Px,Py) .
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.