【发布时间】:2021-06-05 15:52:58
【问题描述】:
我想检查一个人是否住在特定的房子里 ismemberof(NAME, HOUSE) -> (true or false 一次)。我的代码如下。问题是它检查具有与参数匹配的相同名称的所有事实并返回多个我不想要的结果。我怎样才能做到这一点?谢谢。
% Facts:
member(alex, 19, house1).
member(alex, 19, house2).
member(lisa, 21, house3).
% Rules:
ismemberof(NAME, HOUSE) :-
member(NAME, _, HOUSE).
% Queries:
?- ismemberof(alex, house1).
% expected: true
% actual: true
false
【问题讨论】:
-
在 SWI-Prolog 中,结果是确定性的:
?- ismemberof(alex, house1).答案:true.“我找到了一个证明,我确信没有替代证明”。这取决于编译器如何创建谓词索引以及 Prolog VM 如何利用这些索引。