- block(:Goal, +Tag, :Recovery)
- cut_block(+Tag) is semidet
- The control construct block/3 runs Goal in a block labelled Tag.
If Goal calls exit_block/1 using a matching Tag, the execution
of Goal is abandoned using exception handling and execution
continues by running Recovery. Goal can call cut_block/1. If
there is a block with matching Tag, all choice points created
since the block was started are destroyed.
- - The block control structure is implemented on top of
catch/3 and throw/1. If catch/3 is used inside Goal,
the user must ensure that either (1) the protected
goal does not call exit_block/1 or cut_block/1 or (2)
the Catcher of the catch/3 call does not unify with