別の述語へのすべての呼び出しが失敗した場合、どうすれば述語を呼び出すことができますか?
私は持っています:
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