考虑这个Prolog谓词:
silly:-
1 = 1.
silly:-
1 = 2.
查询时,输出答案有两种状态:true和false。无论如何要求Prolog在分离时发出真实陈述后立即终止吗?
答案 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一旦它到达就终止一个真实的陈述 **一个特别指出*在一个分离的声明" ?