我被告知要创建一个兄弟谓词,找出兄弟是否有兄弟姐妹.Brother(B, S) :-.我知道你需要知道他们是否有同样的父母,但我不知道该怎么做.
father(dan,phil).
father(dan,jack).
father(dan,christine).
father(phil,kenton).
father(phil,shula).
father(phil,david).
father(phil,elizabeth).
father(jack,lillian).
father(jack,tony).
father(jack,jenny).
father(tony,tommy).
father(tony,helen).
father(tony,john).
father(roger,adam).
father(roger,debbie).
father(brian,kate).
father(david,pip).
father(david,josh).
father(mark,daniel).
mother(doris,phil).
mother(doris,jack).
mother(doris,christine).
mother(jill,kenton).
mother(jill,shula).
mother(jill,david).
mother(jill,elizabeth).
mother(peggy,lillian).
mother(peggy,tony).
mother(peggy,jenny).
mother(pat,tommy).
mother(pat,helen).
mother(pat,john).
mother(jenny,adam).
mother(jenny,debbie).
mother(jenny,kate).
mother(ruth,pip).
mother(ruth,josh).
mother(shula,daniel).
male(dan).
male(phil).
male(jack).
male(kenton).
male(david).
male(tony).
male(brian).
male(roger).
male(mark).
male(john).
male(tommy).
male(adam).
male(daniel).
male(josh).
female(doris).
female(jill).
female(peggy).
female(christine).
female(shula).
female(ruth).
female(elizabeth).
female(lillian).
female(pat).
female(jenny).
female(helen).
female(debbie).
female(kate).
female(pip).
dead(dan).
dead(doris).
dead(jack).
dead(mark).
dead(john).
dead(fred).
parent(X,Y) :-
father(X,Y); mother(X,Y).
grandfather(X,Y) :-
father(X,Z), mother(Z,Y).
grandfather(X,Y) :-
father(X,Z), father(Z,Y).
ancestor(X,Y) :- parent(X,Y).
ancestor(X,Y) :- parent(X,Z), ancestor(Z,Y).
archer(dan).
archer(X) :- father(P,X), archer(P).
Run Code Online (Sandbox Code Playgroud)
这是我的文件,它定义了父母,祖父等.我需要创建一个兄弟谓词,作为兄弟(B是兄弟,S是兄弟姐妹).例如兄弟(利亚姆,格鲁吉亚).利亚姆是格鲁吉亚的兄弟应该是真的
您可以通过首先提供正式的定义来解决您的问题brother(B,S):
B一个slibing 的兄弟S是一个male/1有相同的father/2F和mother/2M.
现在我们知道这一点,我们为每个条件写一行或多行.
第一个就是条款的主管:
brother(B,S) :-
Run Code Online (Sandbox Code Playgroud)
既然兄弟是a male/1,我们检查的第一个条件是:
male(B),
Run Code Online (Sandbox Code Playgroud)
接下来我们要检查它们是否相同father/2.因此我们定义一个父亲F,并且F必须是父亲B,所以我们写道:
father(F,B),
Run Code Online (Sandbox Code Playgroud)
既然父亲也必须是父亲S,我们写道:
father(F,S),
Run Code Online (Sandbox Code Playgroud)
同样适用于mother:我们定义一位母亲M并检查这位母亲是否为两者的母亲B并且S:
mother(M,B),
mother(M,S).
Run Code Online (Sandbox Code Playgroud)
现在把它们放在一起我们得到:
brother(B,S) :-
male(B),
father(F,B),
father(F,S),
mother(M,B),
mother(M,S).
Run Code Online (Sandbox Code Playgroud)
现在的问题是,通过这个谓词,一个男性将成为他自己的兄弟.如果您不想要这种行为,我们添加一个约束:
一个人不属于
brother/2他自己.
因此,您必须使用不相等的谓词:
B \= S.
Run Code Online (Sandbox Code Playgroud)
或完整的谓词:
brother(B,S) :-
male(B),
father(F,B),
father(F,S),
mother(M,B),
mother(M,S),
B \= S.
Run Code Online (Sandbox Code Playgroud)
此谓词生成以下答案:
?- brother(B,S).
B = phil,
S = jack ;
B = phil,
S = christine ;
B = jack,
S = phil ;
B = jack,
S = christine ;
B = kenton,
S = shula ;
B = kenton,
S = david ;
B = kenton,
S = elizabeth ;
B = david,
S = kenton
...
Run Code Online (Sandbox Code Playgroud)