序言分离

Tua*_*nDT 2 prolog

考虑这个 Prolog 谓词:

silly:-
    1 = 1.
silly:-
    1 = 2.
Run Code Online (Sandbox Code Playgroud)

查询时,输出答案有两种状态:真和假。无论如何,只要 Prolog 在析取中遇到真语句就要求它终止吗?

Kin*_*ken 5

问题是“无论如何要让 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 是合适的?