Prolog断开

时间:2014-08-17 03:55:01

标签: prolog

考虑这个Prolog谓词:

silly:-
    1 = 1.
silly:-
    1 = 2.

查询时,输出答案有两种状态:true和false。无论如何要求Prolog在分离时发出真实陈述后立即终止吗?

2 个答案:

答案 0 :(得分:4)

添加剪切

silly:-
    1 = 1, !.
silly:-
    1 = 2.

或使用if / then / else,然后使用'程序'采取一种非常不同的形状,作为替代分支合并为一个单独的条款。另请注意,如文档中所述

  

与!/ 0不同,谓词作为一个整体的选择点(由于多个子句)不会被破坏。

silly:-
    ( 1 = 1 -> true ; false ).

答案 1 :(得分:3)

问题是" 无论如何要求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.

使用cut !不符合所述问题的语义要求。

如果问题更像是&#34,那么使用剪切是合适的;无论如何询问 告诉 Prolog一旦它到达就终止一个真实的陈述 **一个特别指出*在一个分离的声明" ?