考虑这个 Prolog 谓词:
silly:-
1 = 1.
silly:-
1 = 2.
Run Code Online (Sandbox Code Playgroud)
查询时,输出答案有两种状态:真和假。无论如何,只要 Prolog 在析取中遇到真语句就要求它终止吗?
问题是“无论如何要让 Prolog 在析取中遇到真语句时立即终止”?
答案是“查询答案时使用once/1”。
例如:
?- [user] .
silly:-
1=1 .
silly:-
1=2 .
silly:-
2=2 .
end_of_file .
?- %% query WITHOUT once {results in 2 answers} : %%
silly .
true ;
true.
?- %% query WITH once {results in 1 answer} : %%
once(silly) .
true.
Run Code Online (Sandbox Code Playgroud)
使用 cut!不符合所述问题的语义要求。
如果问题更像是“是否有任何要求 告诉Prolog 在遇到真语句** 在析取中特别指出的语句* 时立即终止”这样的问题,则使用 cut 是合适的?