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?".有任何想法吗?
你切错地方了。在基本条件之后进行剪切,即“一旦满足基本条件,就不再回溯”:
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 指出的错误。
| 归档时间: |
|
| 查看次数: |
8897 次 |
| 最近记录: |