我是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/