让prolog忽略替代方案,但仍然是回溯

时间:2016-04-24 11:18:28

标签: prolog

所以我有一个递归谓词,如下所示:

top_predicate(A, B, C):-
   finish(A, B, C).
top_predicate(A, B, C):-
   sub_predicate_1(B,E),
   E > 10,
   predicate(D, E, F).
top_predicate(A,B,C):-
   % some other predicate
   predicate(D,E,F).

sub_predicate_1有很多选择。我希望Prolog只考虑从sub_predicate_1获得的第一个答案,但仍然可以在它背后回溯。这是因为如果sub_predicate_1的第一个答案小于或等于10,那么所有这些答案都将是。第一个答案总是最好的答案。

我尝试在这里添加剪辑:

predicate(A, B, C):-
   sub_predicate_1(B,E),
   E > 10,!,
   predicate(D, E, F).

但是,如果在一些递归过程中,E> 10失败,程序回溯到top_predicate的第三个定义,然后失败,然后整个程序失败。

我尝试在sub_predicate_1中添加一个剪切(同时在内部拉动E> 10条件),但它产生相同的效果。我可能要求的是什么?

原谅高度抽象的问题,我想知道它为什么会起作用或者不起作用,而不是有人为我解决它。如果您需要更多信息,请询问。

0 个答案:

没有答案