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