Offers an enriched variant of call and cut !!/0 which executes pending goals when the computation has no more alternatives.
This library is useful to, for example, get rid of external connections once the necessary data has been obtained.
:- module(_, _, [det_hook]).
enumerate(X):-
display(enumerating), nl,
OnCut = (display('goal cut'), nl),
OnFail = (display('goal failed'), nl),
det_try(enum(X), OnCut, OnFail).
enum(1).
enum(2).
enum(3). behaves as follows:
?- enumerate(X). enumerating X = 1 ? ; X = 2 ? ; X = 3 ? ; goal failed
(note the message inserted on failure). The execution can be cut as follows:
?- use_package(det_hook).
{Including /home/clip/lib/ciao/ciao-1.7/library/det_hook/det_hook.pl
}
yes
?- enumerate(X), '!!'.
enumerating
goal cut
X = 1 ? ;
no