我是prolog的新手,正在尝试如何在找到答案后停止查询。我正在使用此代码:

member1(L,[L|_]).
member1(L,[_|RS]) :- member1(L,RS),!.

结果是:
| ?- member1(3,[3,2,3]).

true ? a

yes

我不知道如何使Prolog停止打印“true”?并仅打印"is"。我试过使用if/else构造和format函数,但它仍然显示“true?”。有任何想法吗?

最佳答案

您在切错地方。在满足基本条件后削减,即“一旦满足基本条件,就不再回溯”:

member1(L,[L|_]) :- !.
member1(L,[_|RS]) :- member1(L,RS).

如果-那么对我有用,也许您实现的方式有所不同? (在swi-prolog上)
member1(X,[Y|RS]) :-
    ( X = Y         -> true
    ; member1(X,RS) -> true
    ; false
    ) .

Swi也有谓词once/1

编辑以解决由false指出的错误。

关于prolog - 使Prolog返回一种解决方案并停止显示查询选项,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20180335/

10-11 17:42