为什么 prolog 不显示 false,而是显示与特定常量相关的所有元素?

问题描述 投票:0回答:1

我在 Prolog 中有一个与家谱相关的程序,我必须在其中找到与某个人相关的所有兄弟姐妹。

我将规则“姐妹”定义为:

sister(X,Y) :-
    parent(Z,X),
    parent(Z,Y),
    woman(X)

让我们想象“杰克”有多个姐妹:劳拉、杰西卡和朱莉娅。当我问

?- sister('Laura','Jack')
Prolog 回答是的。但是当我问
?- sister(X,'Jack')
时,它回答 false 而不是 X 的所有可能值。

知道出了什么问题或如何解决吗?

prolog swi-prolog
1个回答
0
投票

我通过定义“命令”来修复它:

consult_sisters(X,Y) :- findall(S,不同(姐妹(S,Y)),L), 成员(X,L).

它找到个体Y的所有姐妹,并为每个不同的姐妹将它们添加到列表L一次,然后Prolog将显示列表L的每个元素X。

© www.soinside.com 2019 - 2024. All rights reserved.