? users online
  • Logout
    • Open hangout
    • Open chat for current file
<div class="notebook">

<div class="nb-cell markdown" name="md1">
# Prolog: critical section, backtracking, error handling

See https://stackoverflow.com/questions/43390782/prolog-critical-section-backtracking-error-handling
</div>

<div class="nb-cell program" name="p1">
until_failure((A,B), Result) :-
    !,
    until_failure(A, Result),
    (   var(Result)
    -&gt;  until_failure(B, Result)
    ;   true
    ).
until_failure(G, Result) :-
    (   catch(G, Result, true)
    *-&gt; true
    ;   Result = false(G)
    ).
</div>

<div class="nb-cell query" name="q1">
until_failure((Step1 = true,
               Step2 = true, 
               fail,
               Step3 = true), Result),
writeln([Step1, Step2, Step3]).
</div>

</div>