获得“真实; false”一组为一组规则的答案集
-
08-10-2019 - |
题
首先感谢您的帮助。我正在编写一个描述家庭关系的序幕计划,包括所有姻亲版本。逻辑就在那里,我需要帮助的是一些序言问题,因为我对此并不经验。我正在尝试通过使用半殖民地为每个规则设置多种可能性。
我对待公婆的方式是使我的兄弟也是我的兄弟,所以我需要多次检查才能查看哪个是真的。我希望Prolog返回True,并且只有在任何选项为真时才返回。但是,它可以作为可能的选项返回真实和错误,因为当然,其中一个选项始终将是错误的,而另一个选项始终将是真实的。他们要么是我的兄弟,要么是我的自然兄弟。我不能让prolog只能返回true,也不能选择false作为另一个答案。如果有人有任何建议,那就太好了。相关代码如下。因此,如果我输入“兄弟(宝贝,爸爸)”。当我想要的只是错误的时候,我会得到真实和错误的答案。但是,“兄弟(爸爸,宝贝)。仅返回真实。但是我现在正在闲逛。抱歉,如果有任何代码与小爸爸的东西混淆。谢谢!
/*facts for relationships*/
female(widow).
female(redhair).
spouse(i,widow).
spouse(widow,i).
spouse(dad,redhair).
spouse(redhair,dad).
child(i,dad).
child(redhair,widow).
child(baby,i).
child(onrun,dad).
male(onrun).
male(baby).
male(dad).
male(i).
/*rules*/
daughter(D,P):-
female(D), (child(D,P);(spouse(P,S),child(D,S))).
son(D,P):-
male(D), (child(D,P);(spouse(P,S),child(D,S))).
mother(X,Y):-
female(X),
child(Y,X).
father(X,Y):-
male(X),
child(Y,X).
son_in_law(C,P):-
male(C),spouse(C,S),
(child(S,P);(spouse(P,W),child(S,W))).
daughter_in_law(C,P):-
female(C),spouse(C,S),
(child(S,P);(spouse(P,W),child(S,W))).
brother(S1,S2) :- male(S1),
(child(S1,P) = child(S2,P2));
(child(S1,P),child(S2,P2),spouse(P,P2));
((child(S1,P),son_in_law(S2,P));(child(S2,P),son_in_law(S1,P))).
解决方案
这些多个答案可以阻止使用元隐形 once/1
:
?- once(brother(baby,dad)).
true.
?-
其他提示
谢谢阅读。我知道这不是最容易理解的。孩子在您看到的一系列事实中。孩子双打考试以招收父母。因此,当我经过兄弟(宝贝,爸爸)时,该程序随后打电话给孩子(baby,x)=孩子(爸爸,x)给孩子的功能得到给孩子,所以它返回了父母。然后,我检查父母是否相同,因为这意味着两个是兄弟。
不隶属于 StackOverflow