使Prolog返回一个解决方案并停止显示查询选项

use*_*297 6 format prolog prolog-cut prolog-toplevel

我是prolog的新手,正在试验如何在找到答案之后让它停止查询.我正在使用此代码:

member1(L,[L|_]).                    
member1(L,[_|RS]) :- member1(L,RS),!.      
Run Code Online (Sandbox Code Playgroud)

结果是:

| ?- member1(3,[3,2,3]).

true ? a

yes
Run Code Online (Sandbox Code Playgroud)

我迷失了如何让Prolog停止打印"真的吗?" 而只是打印"是".我尝试过使用if/else构造和格式函数,但它仍然打印"true?".有任何想法吗?

Sho*_*hon 4

你切错地方了。在基本条件之后进行剪切,即“一旦满足基本条件,就不再回溯”:

member1(L,[L|_]) :- !.                   
member1(L,[_|RS]) :- member1(L,RS).    
Run Code Online (Sandbox Code Playgroud)

如果-那么对我有用,也许你的实现方式不同?(在 swi-prolog 上)

member1(X,[Y|RS]) :-
    ( X = Y         -> true
    ; member1(X,RS) -> true
    ; false
    ) .
Run Code Online (Sandbox Code Playgroud)

Swi 也有谓词once/1

编辑以解释 false 指出的错误。