Как я могу вызвать предикат, если все вызовы другого предиката не удались?Вызвать предикат, если сбой другого предиката
у меня есть:
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
в конечном итоге будет выполнен.
Образец Backtracting дерево
root root
|
/ \ |
/ \ all bar1 failed |
/ \ |
/| \ \ ===>>>======>>>> |
/| \ \ |
F F F F E
time 0 1 2 3 4
Abbreviation:
Bar1 failed : F
Bar2 executed : E
Я думаю, вы ищете «если bar1, то true else bar2». Остальное должно быть легко с ответом на ваш предыдущий вопрос ... – twinterer