如果对另一个谓词的所有调用都失败了,我该如何调用一个谓词?
我有:
foo(A, B, C, D) :-
(bar1(Y,Z); bar2(L, K, M)),
foo(A, B, C, D).
我想要的是 :
- 在任何时候,如果
bar1/2
已经成功,bar2/3
将永远不会被执行。 - 如果所有
bar1/2
调用都失败,那么bar2/3
最终将被执行。
样本回溯树
root root
|
/ \ |
/ \ all bar1 failed |
/ \ |
/ | \ \ ===>>>======>>>> |
/ | \ \ |
F F F F E
time 0 1 2 3 4
Abbreviation:
Bar1 failed : F
Bar2 executed : E